syntax = "{{__syntax}}";

package {{__namespace}};

{{~for enum in __enums
    typeName = full_name enum
 ~}}
enum {{typeName}} {
    {{~if !enum.has_zero_value_item ~}}
    {{typeName}}_EMPTY_PLACEHOLDER = 0;
    {{~end~}}
    {{~for item in enum.items ~}}
    {{typeName}}_{{item.name}} = {{item.int_value}};
    {{~end~}}
}
{{~end~}}

{{~for bean in __beans
    typeName = full_name bean
~}}
message {{typeName}} {
{{~if bean.is_abstract_type ~}}
    oneof value {
        {{~for c in bean.hierarchy_not_abstract_children~}}
        {{full_name c}} {{c.name}} = {{c.auto_id}};
        {{~end~}}
    }
{{~else~}}
    {{~for f in bean.hierarchy_export_fields ~}}
    {{pre_decorator f.ctype}} {{declaring_type_name f.ctype}} {{f.name}} = {{f.auto_id}} {{suffix_options f.ctype}};
    {{~end~}}
{{~end~}}
}
{{~end~}}

{{~for table in __tables~}}
message {{full_name table}} {
    repeated {{declaring_type_name table.value_ttype}} data_list = 1 [packed = false];
}
{{~end~}}

