// Code generated by django-cfg/django_client - DO NOT EDIT.
// Generated at: {{ generated_at }}

package {{ package_name }}

import (
	"encoding/json"
	"fmt"
)

{% for enum in enums %}
// {{ (enum.doc or enum.name) | replace('\n', '\n// ') }}
type {{ enum.name }} {{ enum.base_type }}

const (
{% for value in enum['values'] %}
	// {{ (value.description or value.name) | replace('\n', '\n\t// ') }}
	{{ value.name }} {{ enum.name }} = {{ value.value if not enum.is_string_enum else '"%s"' % value.value }}
{% endfor %}
)

// String returns string representation of {{ enum.name }}.
func (e {{ enum.name }}) String() string {
	switch e {
{% for value in enum['values'] %}
	case {{ value.name }}:
		return "{{ value.name }}"
{% endfor %}
	default:
		return fmt.Sprintf("{{ enum.name }}(%v)", {{ enum.base_type }}(e))
	}
}

// MarshalJSON implements json.Marshaler.
func (e {{ enum.name }}) MarshalJSON() ([]byte, error) {
	return json.Marshal({{ enum.base_type }}(e))
}

// UnmarshalJSON implements json.Unmarshaler.
func (e *{{ enum.name }}) UnmarshalJSON(data []byte) error {
	var v {{ enum.base_type }}
	if err := json.Unmarshal(data, &v); err != nil {
		return err
	}
	*e = {{ enum.name }}(v)
	return nil
}

{% endfor %}
