File: enum

package info (click to toggle)
golang-github-digitalocean-go-qemu 0.0~git20200529.1b453d0-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,264 kB
  • sloc: sh: 34; makefile: 7
file content (58 lines) | stat: -rw-r--r-- 1,494 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
{{- $enum := . -}}

// {{ .Name }} -> {{ .Name.Go }} (enum)

// {{ .Name.Go }} implements the "{{ .Name }}" QMP API type.
type {{ $enum.Name.Go }} int

// Known values of {{ .Name.Go }}.
const (
{{- range $i, $v := $enum.Values }}
  {{- if eq $i 0 }}
    {{ $enum.Name.Go }}{{ $v.Go }} {{ $enum.Name.Go }} = iota
  {{- else }}
    {{ $enum.Name.Go }}{{ $v.Go }}
  {{- end }}
{{- end }}
)

// String implements fmt.Stringer.
func (e {{ $enum.Name.Go }}) String() string {
     switch e {
     {{- range $enum.Values }}
     case {{ $enum.Name.Go }}{{ .Go }}:
          return "{{ . }}"
     {{- end }}
     default:
          return fmt.Sprintf("{{ $enum.Name.Go }}(%d)", e)
     }
}

// MarshalJSON implements json.Marshaler.
func (e {{ $enum.Name.Go }}) MarshalJSON() ([]byte, error) {
     switch e {
     {{- range $enum.Values }}
     case {{ $enum.Name.Go }}{{ .Go }}:
          return json.Marshal("{{ . }}")
     {{- end }}
     default:
          return nil, fmt.Errorf("unknown enum value %q for {{ $enum.Name.Go }}", e)
     }
}

// UnmarshalJSON implements json.Unmarshaler.
func (e *{{ $enum.Name.Go }}) UnmarshalJSON(bs []byte) error {
     var s string
     if err := json.Unmarshal(bs, &s); err != nil {
          return err
     }
     switch s {
     {{- range $enum.Values }}
     case "{{ . }}":
          *e = {{ $enum.Name.Go }}{{ .Go }}
     {{- end }}
     default:
          return fmt.Errorf("unknown enum value %q for {{ $enum.Name.Go }}", s)
     }
     return nil
}