2020///
2121/// Keys can include additional context information that some providers use to
2222/// refine value lookups or provide more specific results.
23+ @available ( Configuration 1 . 0 , * )
2324public struct ConfigKey : Sendable {
2425
2526 /// The hierarchical components that make up this configuration key.
@@ -42,10 +43,23 @@ public struct ConfigKey: Sendable {
4243 self . components = components
4344 self . context = context
4445 }
46+
47+ /// Creates a new configuration key.
48+ /// - Parameters:
49+ /// - string: The string represenation of the key path, for example `"http.timeout"`.
50+ /// - context: Additional context information for the key.
51+ public init ( _ string: String , context: [ String : ConfigContextValue ] = [ : ] ) {
52+ self = DotSeparatorKeyDecoder . decode ( string, context: context)
53+ }
4554}
4655
56+ @available ( Configuration 1 . 0 , * )
4757extension ConfigKey : Equatable { }
58+
59+ @available ( Configuration 1 . 0 , * )
4860extension ConfigKey : Hashable { }
61+
62+ @available ( Configuration 1 . 0 , * )
4963extension ConfigKey : Comparable {
5064 // swift-format-ignore: AllPublicDeclarationsHaveDocumentation
5165 public static func < ( lhs: ConfigKey , rhs: ConfigKey ) -> Bool {
@@ -67,6 +81,7 @@ extension ConfigKey: Comparable {
6781 }
6882}
6983
84+ @available ( Configuration 1 . 0 , * )
7085extension ConfigKey : CustomStringConvertible {
7186 // swift-format-ignore: AllPublicDeclarationsHaveDocumentation
7287 public var description : String {
@@ -79,6 +94,15 @@ extension ConfigKey: CustomStringConvertible {
7994 }
8095}
8196
97+ @available ( Configuration 1 . 0 , * )
98+ extension ConfigKey : ExpressibleByStringLiteral {
99+ // swift-format-ignore: AllPublicDeclarationsHaveDocumentation
100+ public init ( stringLiteral value: String ) {
101+ self = DotSeparatorKeyDecoder . decode ( value, context: [ : ] )
102+ }
103+ }
104+
105+ @available ( Configuration 1 . 0 , * )
82106extension ConfigKey : ExpressibleByArrayLiteral {
83107 // swift-format-ignore: AllPublicDeclarationsHaveDocumentation
84108 public init ( arrayLiteral elements: String ... ) {
@@ -94,6 +118,7 @@ extension ConfigKey: ExpressibleByArrayLiteral {
94118///
95119/// Like relative keys, absolute keys consist of hierarchical components and
96120/// optional context information.
121+ @available ( Configuration 1 . 0 , * )
97122public struct AbsoluteConfigKey : Sendable {
98123
99124 /// The hierarchical components that make up this absolute configuration key.
@@ -118,8 +143,13 @@ public struct AbsoluteConfigKey: Sendable {
118143 }
119144}
120145
146+ @available ( Configuration 1 . 0 , * )
121147extension AbsoluteConfigKey : Equatable { }
148+
149+ @available ( Configuration 1 . 0 , * )
122150extension AbsoluteConfigKey : Hashable { }
151+
152+ @available ( Configuration 1 . 0 , * )
123153extension AbsoluteConfigKey : Comparable {
124154 // swift-format-ignore: AllPublicDeclarationsHaveDocumentation
125155 public static func < ( lhs: AbsoluteConfigKey , rhs: AbsoluteConfigKey ) -> Bool {
@@ -141,6 +171,7 @@ extension AbsoluteConfigKey: Comparable {
141171 }
142172}
143173
174+ @available ( Configuration 1 . 0 , * )
144175extension AbsoluteConfigKey : CustomStringConvertible {
145176 // swift-format-ignore: AllPublicDeclarationsHaveDocumentation
146177 public var description : String {
@@ -153,6 +184,7 @@ extension AbsoluteConfigKey: CustomStringConvertible {
153184 }
154185}
155186
187+ @available ( Configuration 1 . 0 , * )
156188extension AbsoluteConfigKey {
157189
158190 /// Creates a new absolute configuration key from a relative key.
@@ -162,6 +194,7 @@ extension AbsoluteConfigKey {
162194 }
163195}
164196
197+ @available ( Configuration 1 . 0 , * )
165198extension AbsoluteConfigKey ? {
166199 /// Returns a new absolute configuration key by appending the given relative key.
167200 /// - Parameter relative: The relative configuration key to append to this key.
@@ -178,6 +211,7 @@ extension AbsoluteConfigKey? {
178211 }
179212}
180213
214+ @available ( Configuration 1 . 0 , * )
181215extension AbsoluteConfigKey {
182216 /// Returns a new absolute configuration key by prepending the given relative key.
183217 /// - Parameter prefix: The relative configuration key to prepend to this key.
@@ -201,6 +235,15 @@ extension AbsoluteConfigKey {
201235 }
202236}
203237
238+ @available ( Configuration 1 . 0 , * )
239+ extension AbsoluteConfigKey : ExpressibleByStringLiteral {
240+ // swift-format-ignore: AllPublicDeclarationsHaveDocumentation
241+ public init ( stringLiteral value: String ) {
242+ self = . init( DotSeparatorKeyDecoder . decode ( value, context: [ : ] ) )
243+ }
244+ }
245+
246+ @available ( Configuration 1 . 0 , * )
204247extension AbsoluteConfigKey : ExpressibleByArrayLiteral {
205248 // swift-format-ignore: AllPublicDeclarationsHaveDocumentation
206249 public init ( arrayLiteral elements: String ... ) {
0 commit comments