From 977ec25e79e8e4e667d82dd79e3df63bde849103 Mon Sep 17 00:00:00 2001 From: Andrej Mihajlov Date: Mon, 26 Sep 2022 16:43:17 +0200 Subject: Kit: implement Codable for IPAddressRange Signed-off-by: Andrej Mihajlov --- Sources/WireGuardKit/IPAddressRange.swift | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Sources/WireGuardKit/IPAddressRange.swift b/Sources/WireGuardKit/IPAddressRange.swift index 28a95d8..20e0da9 100644 --- a/Sources/WireGuardKit/IPAddressRange.swift +++ b/Sources/WireGuardKit/IPAddressRange.swift @@ -27,6 +27,29 @@ extension IPAddressRange: Hashable { } } +extension IPAddressRange: Codable { + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + + try container.encode(self.stringRepresentation) + } + + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + let value = try container.decode(String.self) + + if let ipAddressRange = IPAddressRange(from: value) { + self = ipAddressRange + } else { + let context = DecodingError.Context( + codingPath: container.codingPath, + debugDescription: "Invalid IPAddressRange representation" + ) + throw DecodingError.dataCorrupted(context) + } + } +} + extension IPAddressRange { public var stringRepresentation: String { return "\(address)/\(networkPrefixLength)" -- cgit v1.2.3-59-g8ed1b