diff options
Diffstat (limited to 'Sources/WireGuardKit/PrivateKey.swift')
-rw-r--r-- | Sources/WireGuardKit/PrivateKey.swift | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/Sources/WireGuardKit/PrivateKey.swift b/Sources/WireGuardKit/PrivateKey.swift index aa63e85..19e3f02 100644 --- a/Sources/WireGuardKit/PrivateKey.swift +++ b/Sources/WireGuardKit/PrivateKey.swift @@ -8,7 +8,7 @@ import WireGuardKitC #endif /// Umbrella protocol for all kinds of keys. -public protocol WireGuardKey: RawRepresentable, Hashable where RawValue == Data {} +public protocol WireGuardKey: RawRepresentable, Hashable, Codable where RawValue == Data {} /// Class describing a private key used by WireGuard. public final class PrivateKey: WireGuardKey { @@ -125,6 +125,28 @@ extension WireGuardKey { } } + // MARK: - Codable + + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + let data = try container.decode(Data.self) + + if let instance = Self.init(rawValue: data) { + self = instance + } else { + throw DecodingError.dataCorruptedError( + in: container, + debugDescription: "Corrupt key data." + ) + } + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + + try container.encode(rawValue) + } + // MARK: - Equatable public static func == (lhs: Self, rhs: Self) -> Bool { |