]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Model: TunnelConfiguration: Add explicit conformance to Decodable
authorRoopesh Chander <roop@roopc.net>
Sat, 10 Nov 2018 13:31:34 +0000 (19:01 +0530)
committerRoopesh Chander <roop@roopc.net>
Sat, 10 Nov 2018 13:31:34 +0000 (19:01 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/Shared/Model/Configuration.swift

index 3e661e61ab4ef599d12f12267d3151dd2ca52a66..45c29c118fa6440d418a1bb774fed8b26d7e70dd 100644 (file)
@@ -4,7 +4,7 @@
 import Foundation
 
 @available(OSX 10.14, iOS 12.0, *)
-class TunnelConfiguration: Codable {
+final class TunnelConfiguration {
     var interface: InterfaceConfiguration
     let peers: [PeerConfiguration]
     init(interface: InterfaceConfiguration, peers: [PeerConfiguration]) {
@@ -55,3 +55,17 @@ struct PeerConfiguration: Codable {
         if (publicKey.count != 32) { fatalError("Invalid public key") }
     }
 }
+
+extension TunnelConfiguration: Encodable { }
+extension TunnelConfiguration: Decodable {
+    enum CodingKeys: CodingKey {
+        case interface
+        case peers
+    }
+    convenience init(from decoder: Decoder) throws {
+        let values = try decoder.container(keyedBy: CodingKeys.self)
+        let interface = try values.decode(InterfaceConfiguration.self, forKey: .interface)
+        let peers = try values.decode([PeerConfiguration].self, forKey: .peers)
+        self.init(interface: interface, peers: peers)
+    }
+}