Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 70 additions & 3 deletions Sources/XcodeGraph/Models/ResourceSynthesizer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,20 @@ public struct ResourceSynthesizer: Equatable, Hashable, Codable, Sendable {
public let parserOptions: [String: Parser.Option]
public let extensions: Set<String>
public let template: Template
public let templateParameters: [String: Template.Parameter]

public enum Template: Equatable, Hashable, Codable, Sendable {
case file(AbsolutePath)
case defaultTemplate(String)

public enum Parameter: Equatable, Hashable, Codable, Sendable {
case string(String)
case integer(Int)
case double(Double)
case boolean(Bool)
case dictionary([String: Parameter])
case array([Parameter])
}
}

public enum Parser: String, CaseIterable, Equatable, Hashable, Codable, Sendable {
Expand Down Expand Up @@ -39,12 +49,62 @@ public struct ResourceSynthesizer: Equatable, Hashable, Codable, Sendable {
parser: Parser,
parserOptions: [String: Parser.Option],
extensions: Set<String>,
template: Template
template: Template,
templateParameters: [String: Template.Parameter]
) {
self.parser = parser
self.parserOptions = parserOptions
self.extensions = extensions
self.template = template
self.templateParameters = templateParameters
}
}

// MARK: - ResourceSynthesizer.Template.Parameter - ExpressibleByStringInterpolation

extension ResourceSynthesizer.Template.Parameter: ExpressibleByStringInterpolation {
public init(stringLiteral value: String) {
self = .string(value)
}
}

// MARK: - ResourceSynthesizer.Template.Parameter - ExpressibleByIntegerLiteral

extension ResourceSynthesizer.Template.Parameter: ExpressibleByIntegerLiteral {
public init(integerLiteral value: Int) {
self = .integer(value)
}
}

// MARK: - ResourceSynthesizer.Template.Parameter - ExpressibleByFloatLiteral

extension ResourceSynthesizer.Template.Parameter: ExpressibleByFloatLiteral {
public init(floatLiteral value: Double) {
self = .double(value)
}
}

// MARK: - ResourceSynthesizer.Template.Parameter - ExpressibleByBooleanLiteral

extension ResourceSynthesizer.Template.Parameter: ExpressibleByBooleanLiteral {
public init(booleanLiteral value: Bool) {
self = .boolean(value)
}
}

// MARK: - ResourceSynthesizer.Template.Parameter - ExpressibleByDictionaryLiteral

extension ResourceSynthesizer.Template.Parameter: ExpressibleByDictionaryLiteral {
public init(dictionaryLiteral elements: (String, Self)...) {
self = .dictionary(Dictionary(uniqueKeysWithValues: elements))
}
}

// MARK: - ResourceSynthesizer.Template.Parameter - ExpressibleByArrayLiteral

extension ResourceSynthesizer.Template.Parameter: ExpressibleByArrayLiteral {
public init(arrayLiteral elements: Self...) {
self = .array(elements)
}
}

Expand Down Expand Up @@ -102,9 +162,16 @@ extension ResourceSynthesizer.Parser.Option: ExpressibleByArrayLiteral {
parser: Parser = .assets,
parserOptions: [String: Parser.Option] = [:],
extensions: Set<String> = ["xcassets"],
template: Template = .defaultTemplate("Assets")
template: Template = .defaultTemplate("Assets"),
templateParameters: [String: Template.Parameter] = [:]
) -> Self {
ResourceSynthesizer(parser: parser, parserOptions: parserOptions, extensions: extensions, template: template)
ResourceSynthesizer(
parser: parser,
parserOptions: parserOptions,
extensions: extensions,
template: template,
templateParameters: templateParameters
)
}
}
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,8 @@ struct PBXProjectMapper: PBXProjectMapping {
parser: parser,
parserOptions: [:],
extensions: Set(exts),
template: .defaultTemplate(template)
template: .defaultTemplate(template),
templateParameters: [:]
)
}
}
Expand Down
18 changes: 17 additions & 1 deletion Tests/XcodeGraphTests/Models/ResourceSynthesizerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,23 @@ final class ResourceSynthesizerTests: XCTestCase {
"extension1",
"extension2",
],
template: .defaultTemplate("template")
template: .defaultTemplate("template"),
templateParameters: [
"someInt": 1,
"someDouble": 1.2,
"someString": "string",
"someBool": true,
"someArrayOfString": ["a", "b", "c"],
"someArrayOfInt": [1, 2, 3],
"someDictionary": [
"someInt": 1,
"someDouble": 1.2,
"someString": "string",
"someBool": true,
"someArrayOfString": ["a", "b", "c"],
"someArrayOfInt": [1, 2, 3],
],
]
)

// Then
Expand Down