{{~if __this.comment != '' ~}}
//{{escape_comment __this.comment}}
{{~end~}}
enum {{__name}}
{
    {{~if !has_enum_item __this~}}
    empty_placeholder(0);
    {{~else~}}
{{~if !__this.has_zero_value_item ~}}
    None(0),
{{~end~}}
    {{~end~}}


    {{~ for item in __this.items ~}}
{{~if item.comment_or_alias != '' ~}}
    //{{escape_comment item.comment_or_alias}}
{{~end~}}
    {{item.name}}({{item.int_value}})  {{is_last_enum_item __this item.int_value ? ';' : ','}}

    {{~end~}}
    final int value;

    const {{__name}}(this.value);

    static {{__name}} fromValue(int value)
    {
       return {{__name}}.values.firstWhere((element) => element.value == value, orElse: () => fromValue(0));
    }
}
