@@ -7,10 +7,20 @@ public struct ResourceSynthesizer: Equatable, Hashable, Codable, Sendable {
77 public let parserOptions : [ String : Parser . Option ]
88 public let extensions : Set < String >
99 public let template : Template
10+ public let templateParameters : [ String : Template . Parameter ]
1011
1112 public enum Template : Equatable , Hashable , Codable , Sendable {
1213 case file( AbsolutePath )
1314 case defaultTemplate( String )
15+
16+ public enum Parameter : Equatable , Hashable , Codable , Sendable {
17+ case string( String )
18+ case integer( Int )
19+ case double( Double )
20+ case boolean( Bool )
21+ case dictionary( [ String : Parameter ] )
22+ case array( [ Parameter ] )
23+ }
1424 }
1525
1626 public enum Parser : String , CaseIterable , Equatable , Hashable , Codable , Sendable {
@@ -39,12 +49,62 @@ public struct ResourceSynthesizer: Equatable, Hashable, Codable, Sendable {
3949 parser: Parser ,
4050 parserOptions: [ String : Parser . Option ] ,
4151 extensions: Set < String > ,
42- template: Template
52+ template: Template ,
53+ templateParameters: [ String : Template . Parameter ]
4354 ) {
4455 self . parser = parser
4556 self . parserOptions = parserOptions
4657 self . extensions = extensions
4758 self . template = template
59+ self . templateParameters = templateParameters
60+ }
61+ }
62+
63+ // MARK: - ResourceSynthesizer.Template.Parameter - ExpressibleByStringInterpolation
64+
65+ extension ResourceSynthesizer . Template . Parameter : ExpressibleByStringInterpolation {
66+ public init ( stringLiteral value: String ) {
67+ self = . string( value)
68+ }
69+ }
70+
71+ // MARK: - ResourceSynthesizer.Template.Parameter - ExpressibleByIntegerLiteral
72+
73+ extension ResourceSynthesizer . Template . Parameter : ExpressibleByIntegerLiteral {
74+ public init ( integerLiteral value: Int ) {
75+ self = . integer( value)
76+ }
77+ }
78+
79+ // MARK: - ResourceSynthesizer.Template.Parameter - ExpressibleByFloatLiteral
80+
81+ extension ResourceSynthesizer . Template . Parameter : ExpressibleByFloatLiteral {
82+ public init ( floatLiteral value: Double ) {
83+ self = . double( value)
84+ }
85+ }
86+
87+ // MARK: - ResourceSynthesizer.Template.Parameter - ExpressibleByBooleanLiteral
88+
89+ extension ResourceSynthesizer . Template . Parameter : ExpressibleByBooleanLiteral {
90+ public init ( booleanLiteral value: Bool ) {
91+ self = . boolean( value)
92+ }
93+ }
94+
95+ // MARK: - ResourceSynthesizer.Template.Parameter - ExpressibleByDictionaryLiteral
96+
97+ extension ResourceSynthesizer . Template . Parameter : ExpressibleByDictionaryLiteral {
98+ public init ( dictionaryLiteral elements: ( String , Self ) ... ) {
99+ self = . dictionary( Dictionary ( uniqueKeysWithValues: elements) )
100+ }
101+ }
102+
103+ // MARK: - ResourceSynthesizer.Template.Parameter - ExpressibleByArrayLiteral
104+
105+ extension ResourceSynthesizer . Template . Parameter : ExpressibleByArrayLiteral {
106+ public init ( arrayLiteral elements: Self ... ) {
107+ self = . array( elements)
48108 }
49109}
50110
@@ -102,9 +162,16 @@ extension ResourceSynthesizer.Parser.Option: ExpressibleByArrayLiteral {
102162 parser: Parser = . assets,
103163 parserOptions: [ String : Parser . Option ] = [ : ] ,
104164 extensions: Set < String > = [ " xcassets " ] ,
105- template: Template = . defaultTemplate( " Assets " )
165+ template: Template = . defaultTemplate( " Assets " ) ,
166+ templateParameters: [ String : Template . Parameter ] = [ : ]
106167 ) -> Self {
107- ResourceSynthesizer ( parser: parser, parserOptions: parserOptions, extensions: extensions, template: template)
168+ ResourceSynthesizer (
169+ parser: parser,
170+ parserOptions: parserOptions,
171+ extensions: extensions,
172+ template: template,
173+ templateParameters: templateParameters
174+ )
108175 }
109176 }
110177#endif
0 commit comments