You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kratos/cmd/protoc-gen-go-errors/template.go

46 lines
826 B

package main
import (
"bytes"
"text/template"
)
var errorsTemplate = `
{{ range .Errors }}
func Is{{.Value}}(err error) bool {
e := errors.FromError(err)
if e.Reason == {{.Name}}_{{.Value}}.String() && e.Code == {{.HttpCode}} {
return true
}
return false
}
func Error{{.Value}}(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
}
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 string(buf.Bytes())
}