aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/WireGuard/Model
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2018-10-19 09:15:37 +0530
committerRoopesh Chander <roop@roopc.net>2018-10-27 15:13:01 +0530
commit8ec73025f2216e5c4c7e4170582cb2e4a16fd06d (patch)
tree2c62936d128e1c4b1a225c2c9a57c411dda8d86f /WireGuard/WireGuard/Model
parentModel: Name should be part of the interface, not the tunnel (diff)
downloadwireguard-apple-8ec73025f2216e5c4c7e4170582cb2e4a16fd06d.tar.xz
wireguard-apple-8ec73025f2216e5c4c7e4170582cb2e4a16fd06d.zip
Model: IPAddressRange: Converting to and from String
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to 'WireGuard/WireGuard/Model')
-rw-r--r--WireGuard/WireGuard/Model/IPAddressRange.swift31
1 files changed, 31 insertions, 0 deletions
diff --git a/WireGuard/WireGuard/Model/IPAddressRange.swift b/WireGuard/WireGuard/Model/IPAddressRange.swift
index 4498b58..ca4a7b9 100644
--- a/WireGuard/WireGuard/Model/IPAddressRange.swift
+++ b/WireGuard/WireGuard/Model/IPAddressRange.swift
@@ -15,6 +15,37 @@ struct IPAddressRange {
var networkPrefixLength: UInt8
}
+// MARK: Converting to and from String
+// For use in the UI
+
+extension IPAddressRange {
+ init?(from string: String) {
+ guard let indexOfSlash = string.lastIndex(of: "/") else { return nil }
+ let indexOfNetworkPrefixLength = string.index(after: indexOfSlash)
+ guard (indexOfNetworkPrefixLength < string.endIndex) else { return nil }
+ let addressString = String(string[string.startIndex ..< indexOfSlash])
+ if let addr = IPv4Address(addressString) {
+ address = addr
+ } else if let addr = IPv6Address(addressString) {
+ address = addr
+ } else {
+ return nil
+ }
+ let networkPrefixLengthSubstring = string[indexOfNetworkPrefixLength ..< string.endIndex]
+ if let npl = UInt8(networkPrefixLengthSubstring) {
+ networkPrefixLength = npl
+ } else {
+ return nil
+ }
+ }
+ func stringRepresentation() -> String {
+ return "\(address)/\(networkPrefixLength)"
+ }
+}
+
+// MARK: Codable
+// For serializing to disk
+
@available(OSX 10.14, iOS 12.0, *)
extension IPAddressRange: Codable {
public func encode(to encoder: Encoder) throws {