Sources/KeycaskCore/VaultCodec.swift
32 lines · 906 bytes
1import Foundation
2
3public enum VaultCodec {
4 public static func makeEncoder() -> JSONEncoder {
5 let encoder = JSONEncoder()
6 encoder.outputFormatting = [.sortedKeys, .withoutEscapingSlashes]
7 encoder.dateEncodingStrategy = .iso8601
8 return encoder
9 }
10
11 public static func makeDecoder() -> JSONDecoder {
12 let decoder = JSONDecoder()
13 decoder.dateDecodingStrategy = .iso8601
14 return decoder
15 }
16
17 public static func encode(_ vault: Vault) throws -> Data {
18 do {
19 return try makeEncoder().encode(vault)
20 } catch {
21 throw KeycaskError.io("encode vault: \(error)")
22 }
23 }
24
25 public static func decode(_ data: Data) throws -> Vault {
26 do {
27 return try makeDecoder().decode(Vault.self, from: data)
28 } catch {
29 throw KeycaskError.corrupt("\(error)")
30 }
31 }
32}