    /**
     * {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{description}}{{/description}}
     */
{{#withXml}}
    @XmlType(name="{{datatypeWithEnum}}")
    @XmlEnum({{dataType}}.class)
{{/withXml}}
{{#additionalEnumTypeAnnotations}}
    {{{.}}}
{{/additionalEnumTypeAnnotations}}
    public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
    {{#allowableValues}}
        {{#enumVars}}
            {{#enumDescription}}
        /**
         * {{enumDescription}}
         */
            {{/enumDescription}}
            {{#withXml}}
        @XmlEnumValue({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}})
            {{/withXml}}
        {{{name}}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}}
        {{/enumVars}}
    {{/allowableValues}}

        private {{{dataType}}} value;

        {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}({{{dataType}}} value) {
            this.value = value;
        }

    {{#jackson}}
        @JsonValue
    {{/jackson}}
        public {{{dataType}}} getValue() {
            return value;
        }

        @Override
        public String toString() {
            return String.valueOf(value);
        }

    {{#jackson}}
        @JsonCreator
    {{/jackson}}
        public static {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} fromValue({{{dataType}}} value) {
            for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
                if (b.value.{{^isString}}equals{{/isString}}{{#isString}}{{#useEnumCaseInsensitive}}equalsIgnoreCase{{/useEnumCaseInsensitive}}{{^useEnumCaseInsensitive}}equals{{/useEnumCaseInsensitive}}{{/isString}}(value)) {
                    return b;
                }
            }
    {{#isNullable}}
            return null;
    {{/isNullable}}
    {{^isNullable}}
            throw new IllegalArgumentException("Unexpected value '" + value + "'");
    {{/isNullable}}
        }
    }