From 4d849550dc28f5c18cb6c0ebeb6b6e0804ac673f Mon Sep 17 00:00:00 2001 From: NiseVoid Date: Wed, 31 Oct 2018 16:25:09 +0100 Subject: [PATCH] Change template --- jsonenums.go | 2 -- template.go | 76 +++++++++++++++++++++++++--------------------------- 2 files changed, 37 insertions(+), 41 deletions(-) diff --git a/jsonenums.go b/jsonenums.go index 7d26291..56090c6 100644 --- a/jsonenums.go +++ b/jsonenums.go @@ -16,7 +16,6 @@ // Given the name of a (signed or unsigned) integer type T that has constants // defined, jsonenums will create a new self-contained Go source file implementing // -// func (t T) String() string // func (t T) MarshalJSON() ([]byte, error) // func (t *T) UnmarshalJSON([]byte) error // @@ -47,7 +46,6 @@ // in the same directory will create the file pill_jsonenums.go, in package painkiller, // containing a definition of // -// func (r Pill) String() string // func (r Pill) MarshalJSON() ([]byte, error) // func (r *Pill) UnmarshalJSON([]byte) error // diff --git a/template.go b/template.go index 332c2a3..c397584 100644 --- a/template.go +++ b/template.go @@ -18,63 +18,61 @@ package main import "text/template" var generatedTmpl = template.Must(template.New("generated").Parse(` -// generated by jsonenums {{.Command}}; DO NOT EDIT +// Code generated by "jsonenums {{.Command}}"; DO NOT EDIT. package {{.PackageName}} import ( - "encoding/json" - "fmt" + "encoding/json" + "fmt" ) {{range $typename, $values := .TypesAndValues}} var ( - _{{$typename}}NameToValue = map[string]{{$typename}} { - {{range $values}}"{{.}}": {{.}}, - {{end}} - } - - _{{$typename}}ValueToName = map[{{$typename}}]string { - {{range $values}}{{.}}: "{{.}}", - {{end}} - } + _{{$typename}}NameToValue map[string]{{$typename}} + _{{$typename}}ValueToName map[{{$typename}}]string ) func init() { - var v {{$typename}} - if _, ok := interface{}(v).(fmt.Stringer); ok { - _{{$typename}}NameToValue = map[string]{{$typename}} { - {{range $values}}interface{}({{.}}).(fmt.Stringer).String(): {{.}}, - {{end}} - } - } + _{{$typename}}NameToValue = map[string]{{$typename}} { + {{range $values}}{{.}}.String(): {{.}}, + {{end}} + } + + _{{$typename}}ValueToName = map[{{$typename}}]string { + {{range $values}}{{.}}: {{.}}.String(), + {{end}} + } } -// MarshalJSON is generated so {{$typename}} satisfies json.Marshaler. +// MarshalJSON implements json.Marshaler func (r {{$typename}}) MarshalJSON() ([]byte, error) { - if s, ok := interface{}(r).(fmt.Stringer); ok { - return json.Marshal(s.String()) - } - s, ok := _{{$typename}}ValueToName[r] - if !ok { - return nil, fmt.Errorf("invalid {{$typename}}: %d", r) - } - return json.Marshal(s) + if s, ok := interface{}(r).(fmt.Stringer); ok { + return json.Marshal(s.String()) + } + + s, ok := _{{$typename}}ValueToName[r] + if !ok { + return nil, fmt.Errorf("invalid {{$typename}}: %d", r) + } + return json.Marshal(s) } -// UnmarshalJSON is generated so {{$typename}} satisfies json.Unmarshaler. +// UnmarshalJSON implements json.Unmarshaler func (r *{{$typename}}) UnmarshalJSON(data []byte) error { - var s string - if err := json.Unmarshal(data, &s); err != nil { - return fmt.Errorf("{{$typename}} should be a string, got %s", data) - } - v, ok := _{{$typename}}NameToValue[s] - if !ok { - return fmt.Errorf("invalid {{$typename}} %q", s) - } - *r = v - return nil + var s string + if err := json.Unmarshal(data, &s); err != nil { + return fmt.Errorf("{{$typename}} should be a string, got %s", data) + } + + v, ok := _{{$typename}}NameToValue[s] + if !ok { + return fmt.Errorf("invalid value: %s", s) + } + + *r = v + return nil } {{end}}