Created
March 3, 2021 02:59
-
-
Save gtokman/e9f658625a7e061f98727de25f953fd0 to your computer and use it in GitHub Desktop.
swift gen swiftui stencil
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// swiftlint:disable all | |
// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen | |
{% if catalogs %} | |
{% set enumName %}{{param.enumName|default:"Asset"}}{% endset %} | |
{% set colorType %}{{param.colorTypeName|default:"ColorAsset"}}{% endset %} | |
{% set imageType %}{{param.imageTypeName|default:"ImageAsset"}}{% endset %} | |
{% set forceNamespaces %}{{param.forceProvidesNamespaces|default:"false"}}{% endset %} | |
{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %} | |
import SwiftUI | |
// swiftlint:disable superfluous_disable_command | |
// swiftlint:disable file_length | |
// MARK: - Asset Catalogs | |
{% macro enumBlock assets %} | |
{% call casesBlock assets %} | |
{% if param.allValues %} | |
// swiftlint:disable trailing_comma | |
{{accessModifier}} static let allColors: [{{colorType}}] = [ | |
{% filter indent:2 %}{% call allValuesBlock assets "color" "" %}{% endfilter %} | |
] | |
{{accessModifier}} static let allImages: [{{imageType}}] = [ | |
{% filter indent:2 %}{% call allValuesBlock assets "image" "" %}{% endfilter %} | |
] | |
// swiftlint:enable trailing_comma | |
{% endif %} | |
{% endmacro %} | |
{% macro casesBlock assets %} | |
{% for asset in assets %} | |
{% if asset.type == "color" %} | |
{{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{colorType}}(name: "{{asset.value}}") | |
{% elif asset.type == "image" %} | |
{{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{imageType}}(name: "{{asset.value}}") | |
{% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} | |
{{accessModifier}} enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { | |
{% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %} | |
} | |
{% elif asset.items %} | |
{% call casesBlock asset.items %} | |
{% endif %} | |
{% endfor %} | |
{% endmacro %} | |
{% macro allValuesBlock assets filter prefix %} | |
{% for asset in assets %} | |
{% if asset.type == filter %} | |
{{prefix}}{{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}, | |
{% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %} | |
{% set prefix2 %}{{prefix}}{{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.{% endset %} | |
{% call allValuesBlock asset.items filter prefix2 %} | |
{% elif asset.items %} | |
{% call allValuesBlock asset.items filter prefix %} | |
{% endif %} | |
{% endfor %} | |
{% endmacro %} | |
// swiftlint:disable identifier_name line_length nesting type_body_length type_name | |
{{accessModifier}} enum {{enumName}} { | |
{% if catalogs.count > 1 %} | |
{% for catalog in catalogs %} | |
{{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} { | |
{% filter indent:2 %}{% call enumBlock catalog.assets %}{% endfilter %} | |
} | |
{% endfor %} | |
{% else %} | |
{% call enumBlock catalogs.first.assets %} | |
{% endif %} | |
} | |
// swiftlint:enable identifier_name line_length nesting type_body_length type_name | |
// MARK: - Implementation Details | |
{{accessModifier}} struct {{colorType}} { | |
fileprivate let name: String | |
{{accessModifier}} var color: Color { | |
Color(self) | |
} | |
} | |
{{accessModifier}} extension Color { | |
/// Creates a named color. | |
/// - Parameter asset: the color resource to lookup. | |
init(_ asset: {{colorType}}) { | |
let bundle = Bundle(for: BundleToken.self) | |
self.init(asset.name, bundle: bundle) | |
} | |
} | |
{{accessModifier}} struct {{imageType}} { | |
fileprivate let name: String | |
{{accessModifier}} var image: Image { | |
Image(name) | |
} | |
} | |
{{accessModifier}} extension Image { | |
/// Creates a labeled image that you can use as content for controls. | |
/// - Parameter asset: the image resource to lookup. | |
init(_ asset: {{imageType}}) { | |
let bundle = Bundle(for: BundleToken.self) | |
self.init(asset.name, bundle: bundle) | |
} | |
} | |
private final class BundleToken {} | |
{% else %} | |
// No assets found | |
{% endif %} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment