
{% for m in proto.messages %}

tosca_definitions_version: tosca_simple_yaml_1_0

node_types:

    # Example usage:
    #
    # <node-name>:
    #     type: tosca.nodes.{{ m.name }}
    #     properties:
    #       must-exist: true # optional to reference models created in other recipes
{%- for f in (m.fields + xproto_base_fields(m, proto.message_table)) | sort(attribute='name') %}
{%- if not f.link and xproto_tosca_required(f.options.null, f.options.blank, f.options.default) %}
    #       {{ f.name }}: <value>
{%- endif -%}
{%- endfor %}



    tosca.nodes.{{ m.name }}:
        derived_from: tosca.nodes.Root
        description: {% if m.options.description -%}{{ m.options.description}}{% else%}"An XOS {{ m.name }}"{%- endif %}
        capabilities:
            {{ m.name|lower }}:
                type: tosca.capabilities.xos.{{ m.name }}
        properties:
            must-exist:
                type: boolean
                default: false
                description: Allow to reference existing models in TOSCA recipes
            {% for f in (m.fields + xproto_base_fields(m, proto.message_table)) | sort(attribute='name') %}
            {%- if not f.link -%}
            {{ f.name }}:
                type: {{ xproto_tosca_field_type(f.type) }}
                required: {{ xproto_tosca_required(f.options.null, f.options.blank, f.options.default) }}
                description: {{ f.options.help_text }}
            {% endif %}
            {%- endfor %}

    {% for l in m.links %}
    {%- if l.link_type == "manytoone" -%}


    # Identify a {{ l.peer.name }} that belongs to a {{ m.name }}
    #
    # example usage:
    # requirements:
    #   - {{ l.src_port }}:
    #       node: <node-name>:
    #       relationship: tosca.relationships.BelongsToOne

    tosca.relationships.BelongsToOne:
        derived_from: tosca.relationships.Root
        valid_target_types: [ tosca.capabilities.xos.{{ l.peer.name }} ]
    {%- endif%}
    {%- if l.link_type == "manytomany" -%}
    tosca.relationships.BelongsToMany:
        derived_from: tosca.relationships.Root
        valid_target_types: [ tosca.capabilities.xos.{{ l.peer.name }} ]
    {%- endif%}
    {% endfor %}

    tosca.capabilities.xos.{{ m.name }}:
        derived_from: tosca.capabilities.Root
        description: {{ m.name }}

+++ {{ m.name }}.yaml

{%- endfor %}

