Skip to content

Commit 5c5bcab

Browse files
committed
feat: add template parameters to ResourceSynthesizer
1 parent 6daad18 commit 5c5bcab

File tree

3 files changed

+89
-5
lines changed

3 files changed

+89
-5
lines changed

Sources/XcodeGraph/Models/ResourceSynthesizer.swift

Lines changed: 70 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ struct PBXProjectMapper: PBXProjectMapping {
166166
parser: parser,
167167
parserOptions: [:],
168168
extensions: Set(exts),
169-
template: .defaultTemplate(template)
169+
template: .defaultTemplate(template),
170+
templateParameters: [:]
170171
)
171172
}
172173
}

Tests/XcodeGraphTests/Models/ResourceSynthesizerTests.swift

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,23 @@ final class ResourceSynthesizerTests: XCTestCase {
1313
"extension1",
1414
"extension2",
1515
],
16-
template: .defaultTemplate("template")
16+
template: .defaultTemplate("template"),
17+
templateParameters: [
18+
"someInt": 1,
19+
"someDouble": 1.2,
20+
"someString": "string",
21+
"someBool": true,
22+
"someArrayOfString": ["a", "b", "c"],
23+
"someArrayOfInt": [1, 2, 3],
24+
"someDictionary": [
25+
"someInt": 1,
26+
"someDouble": 1.2,
27+
"someString": "string",
28+
"someBool": true,
29+
"someArrayOfString": ["a", "b", "c"],
30+
"someArrayOfInt": [1, 2, 3],
31+
],
32+
]
1733
)
1834

1935
// Then

0 commit comments

Comments
 (0)