krz/keycask

Password manager: Swift core library, CLI for macOS/Linux/Windows, iOS/macOS app. cli password-manager swift

Sources/KeycaskCore/VaultCodec.swift

v0.1.0
keycask/Sources/KeycaskCore/VaultCodec.swift history · blame · raw

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}