package main import ( "bytes" "text/template" ) var errorsTemplate = ` {{ range .Errors }} {{ if .HasComment }}{{ .Comment }}{{ end -}} func Is{{.CamelValue}}(err error) bool { if err == nil { return false } e := errors.FromError(err) return e.Reason == {{ .Name }}_{{ .Value }}.String() && e.Code == {{ .HTTPCode }} } {{ if .HasComment }}{{ .Comment }}{{ end -}} func Error{{ .CamelValue }}(format string, args ...interface{}) *errors.Error { return errors.New({{ .HTTPCode }}, {{ .Name }}_{{ .Value }}.String(), fmt.Sprintf(format, args...)) } {{- end }} ` type errorInfo struct { Name string Value string HTTPCode int CamelValue string Comment string HasComment bool } type errorWrapper struct { Errors []*errorInfo } func (e *errorWrapper) execute() string { buf := new(bytes.Buffer) tmpl, err := template.New("errors").Parse(errorsTemplate) if err != nil { panic(err) } if err := tmpl.Execute(buf, e); err != nil { panic(err) } return buf.String() }