5
5
6
6
import Foundation
7
7
8
+ /// Helper functions for configuring a decoder's `userInfo` dictionary for decoding `Option`.
9
+ /// Each of the overloads that does not require the configuration closure, will configure both
10
+ /// `Option<T>` and `Option<T?>`.
11
+ ///
12
+ /// ```swift
13
+ /// struct Container: ArgumentGroup, FormatterNode {
14
+ /// let flagFormatter: FlagFormatter = .init(prefix: .doubleDash)
15
+ /// let optionFormatter: OptionFormatter = .init(prefix: .doubleDash)
16
+ /// @Option var option: String = "value"
17
+ /// }
18
+ /// let encoded = try JSONEncoder().encode(Container())
19
+ /// let decoder = JSONDecoder()
20
+ /// decoder.userInfo.addOptionConfiguration(for: String.self)
21
+ /// let decoded = try decoder.decode(Container.self, from: encoded)
22
+ /// // decoded = ["--option", "value"]
23
+ /// ```
8
24
extension [ CodingUserInfoKey : Any ] {
9
25
public mutating func addOptionConfiguration< T> (
10
- for _: Option < T > . Type ,
26
+ for _: T . Type ,
11
27
configuration: @escaping Option < T > . DecodingConfiguration
12
28
) where T: Decodable {
13
29
guard let key = Option< T> . configurationCodingUserInfoKey( ) else {
@@ -16,46 +32,24 @@ extension [CodingUserInfoKey: Any] {
16
32
self [ key] = configuration
17
33
}
18
34
19
- public mutating func addOptionConfiguration< T> ( for _: Option < T > . Type ) where T: Decodable ,
20
- T: CustomStringConvertible
21
- {
22
- addOptionConfiguration ( for: Option< T> . self , configuration: Option< T> . unwrap( _: ) )
23
- addOptionConfiguration ( for: Option< T> . self , configuration: Option< T?> . unwrap( _: ) )
24
- }
25
-
26
- public mutating func addOptionConfiguration< T> ( for _: Option < T > . Type ) where T: Decodable , T: RawRepresentable ,
27
- T. RawValue: CustomStringConvertible
28
- {
29
- addOptionConfiguration ( for: Option< T> . self , configuration: Option< T> . unwrap( _: ) )
30
- addOptionConfiguration ( for: Option< T> . self , configuration: { $0. rawValue. description } )
31
- }
32
-
33
- public mutating func addOptionConfiguration< T> ( for _: Option < T > . Type ) where T: Decodable ,
34
- T: CustomStringConvertible ,
35
- T: RawRepresentable , T. RawValue: CustomStringConvertible
36
- {
37
- addOptionConfiguration ( for: Option< T> . self , configuration: Option< T> . unwrap( _: ) )
38
- addOptionConfiguration ( for: Option< T> . self , configuration: Option< T?> . unwrap( _: ) )
39
- }
40
-
41
35
public mutating func addOptionConfiguration< T> ( for _: T . Type ) where T: Decodable ,
42
36
T: CustomStringConvertible
43
37
{
44
- addOptionConfiguration ( for: Option < T > . self , configuration: Option< T> . unwrap( _: ) )
45
- addOptionConfiguration ( for: Option < T > . self , configuration: Option< T?> . unwrap( _: ) )
38
+ addOptionConfiguration ( for: T . self, configuration: Option< T> . unwrap( _: ) )
39
+ addOptionConfiguration ( for: T . self, configuration: Option< T?> . unwrap( _: ) )
46
40
}
47
41
48
42
public mutating func addOptionConfiguration< T> ( for _: T . Type ) where T: Decodable , T: RawRepresentable ,
49
43
T. RawValue: CustomStringConvertible
50
44
{
51
- addOptionConfiguration ( for: Option < T > . self , configuration: Option< T> . unwrap( _: ) )
52
- addOptionConfiguration ( for: Option < T > . self , configuration: { $0. rawValue. description } )
45
+ addOptionConfiguration ( for: T . self, configuration: Option< T> . unwrap( _: ) )
46
+ addOptionConfiguration ( for: T . self, configuration: { $0. rawValue. description } )
53
47
}
54
48
55
49
public mutating func addOptionConfiguration< T> ( for _: T . Type ) where T: Decodable , T: CustomStringConvertible ,
56
50
T: RawRepresentable , T. RawValue: CustomStringConvertible
57
51
{
58
- addOptionConfiguration ( for: Option < T > . self , configuration: Option< T> . unwrap( _: ) )
59
- addOptionConfiguration ( for: Option < T > . self , configuration: Option< T?> . unwrap( _: ) )
52
+ addOptionConfiguration ( for: T . self, configuration: Option< T> . unwrap( _: ) )
53
+ addOptionConfiguration ( for: T . self, configuration: Option< T?> . unwrap( _: ) )
60
54
}
61
55
}
0 commit comments