davidscheutz / Unison

Opinionated app architecture inspired by ETA & Mobius
4 stars 0 forks source link

Smart Copy #4

Closed davidscheutz closed 1 year ago

davidscheutz commented 1 year ago

Generate convenient copy functions for the State using e.g. Sourcery.

davidscheutz commented 1 year ago

ChatGPT template:

// Template name: SmartCopy
// Template version: 1.0

// Iterate over all the structs in the source code
{% for type in types.structs %}
{{ type.accessibility }} struct {{ type.name }} {
    {% for property in type.storedProperties %}
    let {{ property.name }}: {{ property.type }}
    {% endfor %}

    {% if type.storedProperties.count > 0 %}
    init({% for property in type.storedProperties %}{{ property.name }}: {{ property.type }}{% ifnot forloop.last %}, {% endif %}{% endfor %}) {
        {% for property in type.storedProperties %}
        self.{{ property.name }} = {{ property.name }}
        {% endfor %}
    }
    {% endif %}
}

extension {{ type.name }} {
    func updating(
        {% for property in type.storedProperties %}
        {{ property.name }}: {{ property.type }}? = nil{% ifnot forloop.last %}, {% endif %}
        {% endfor %}
    ) -> {{ type.name }} {
        return {{ type.name }}(
            {% for property in type.storedProperties %}
            {{ property.name }}: {{ property.name }} ?? self.{{ property.name }}{% ifnot forloop.last %}, {% endif %}
            {% endfor %}
        )
    }
}
{% endfor %}