Kit: implement Codable

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
This commit is contained in:
Andrej Mihajlov
2022-05-05 12:01:21 +02:00
parent 94fa120c73
commit 296ec5b63e
+23 -1
View File
@@ -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 {