{{>hooks/enumHeader}}
{{#each enumValues}}
@{{javax}}.xml.bind.annotation.XmlEnumValue({{{stringLiteral value}}}) {{{name}}}({{{literalValue}}}),
{{/each}}
{{#if enumValues}}
;
{{/if}}

private {{enumValueNativeType}} value;

{{className name}}({{enumValueNativeType}} v) {
	value = v;
}

@com.fasterxml.jackson.annotation.JsonValue
public {{enumValueNativeType}} value() {
	return value;
}

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

/**
 * Return the {{className name}} that has the given {@link #value()} by matching
 * its string representation.
 */
public static {{className name}} fromValue(java.lang.String v) {
	for ({{className name}} b : {{className name}}.values()) {
		if (java.lang.String.valueOf(b.value).equals(v)) {
			return b;
		}
	}
	throw new java.lang.IllegalArgumentException("Unsupported {{className name}} value: " + v);
}

{{>hooks/enumFooter}}
{{#optionalPartial (concat 'hooks/enum/' (className name)) }}
{{/optionalPartial}}
