55// Created by Coen ten Thije Boonkkamp on 28/12/2024.
66//
77
8- import Foundation
98import RFC_1035
109
1110/// RFC 1123 compliant host name
@@ -65,7 +64,7 @@ extension Domain {
6564extension Domain {
6665 /// A type-safe host label that enforces RFC 1123 rules
6766 public struct Label : Hashable , Sendable {
68- private let value : String
67+ public let value : String
6968
7069 /// Initialize a label, validating RFC 1123 rules
7170 internal init ( _ string: String , validateAs type: ValidationType ) throws {
@@ -84,8 +83,6 @@ extension Domain {
8483
8584 self . value = string
8685 }
87-
88- public var stringValue : String { value }
8986 }
9087}
9188
@@ -114,7 +111,7 @@ extension Domain {
114111extension Domain {
115112 /// The complete host name as a string
116113 public var name : String {
117- labels. map ( \ . stringValue ) . joined ( separator: " . " )
114+ labels. map ( String . init ) . joined ( separator: " . " )
118115 }
119116
120117 /// The top-level domain (rightmost label)
@@ -135,7 +132,7 @@ extension Domain {
135132
136133 /// Creates a subdomain by prepending new labels
137134 public func addingSubdomain( _ components: [ String ] ) throws -> Domain {
138- try Domain ( labels: components + labels. map ( \ . stringValue ) )
135+ try Domain ( labels: components + labels. map ( String . init ) )
139136 }
140137
141138 public func addingSubdomain( _ components: String ... ) throws -> Domain {
@@ -145,41 +142,24 @@ extension Domain {
145142 /// Returns the parent domain by removing the leftmost label
146143 public func parent( ) throws -> Domain ? {
147144 guard labels. count > 1 else { return nil }
148- return try Domain ( labels: labels. dropFirst ( ) . map ( \ . stringValue ) )
145+ return try Domain ( labels: labels. dropFirst ( ) . map ( String . init ) )
149146 }
150147
151148 /// Returns the root domain (tld + sld)
152149 public func root( ) throws -> Domain ? {
153150 guard labels. count >= 2 else { return nil }
154- return try Domain ( labels: labels. suffix ( 2 ) . map ( \ . stringValue ) )
151+ return try Domain ( labels: labels. suffix ( 2 ) . map ( String . init ) )
155152 }
156153}
157154
158155// MARK: - Errors
159156extension Domain {
160- public enum ValidationError : Error , LocalizedError , Equatable {
157+ public enum ValidationError : Error , Equatable {
161158 case empty
162159 case tooLong( _ length: Int )
163160 case tooManyLabels
164161 case invalidLabel( _ label: String )
165162 case invalidTLD( _ tld: String )
166-
167- public var errorDescription : String ? {
168- switch self {
169- case . empty:
170- return " Host name cannot be empty "
171- case . tooLong( let length) :
172- return " Host name length \( length) exceeds maximum of \( Limits . maxLength) "
173- case . tooManyLabels:
174- return " Host name has too many labels (maximum \( Limits . maxLabels) ) "
175- case . invalidLabel( let label) :
176- return
177- " Invalid label ' \( label) '. Must start and end with letter/digit, and contain only letters/digits/hyphens "
178- case . invalidTLD( let tld) :
179- return
180- " Invalid TLD ' \( tld) '. Must start and end with letter, and contain only letters/digits/hyphens "
181- }
182- }
183163 }
184164}
185165
0 commit comments