New JSON error facilities
This commit is contained in:
parent
b7205a6ec2
commit
71bd9f4500
35
errors.go
35
errors.go
@ -7,6 +7,7 @@ package gin
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -36,6 +37,25 @@ func (msg *errorMsg) Meta(data interface{}) *errorMsg {
|
||||
return msg
|
||||
}
|
||||
|
||||
func (msg *errorMsg) JSON() interface{} {
|
||||
json := H{}
|
||||
if msg.Metadata != nil {
|
||||
value := reflect.ValueOf(msg.Metadata)
|
||||
switch value.Kind() {
|
||||
case reflect.Struct:
|
||||
return msg.Metadata
|
||||
case reflect.Map:
|
||||
for _, key := range value.MapKeys() {
|
||||
json[key.String()] = value.MapIndex(key).Interface()
|
||||
}
|
||||
}
|
||||
}
|
||||
if _, ok := json["error"]; !ok {
|
||||
json["error"] = msg.Error()
|
||||
}
|
||||
return json
|
||||
}
|
||||
|
||||
func (msg *errorMsg) Error() string {
|
||||
return msg.Err.Error()
|
||||
}
|
||||
@ -74,6 +94,21 @@ func (a errorMsgs) Errors() []string {
|
||||
return errorStrings
|
||||
}
|
||||
|
||||
func (a errorMsgs) JSON() interface{} {
|
||||
switch len(a) {
|
||||
case 0:
|
||||
return nil
|
||||
case 1:
|
||||
return a.Last().JSON()
|
||||
default:
|
||||
json := make([]interface{}, len(a))
|
||||
for i, err := range a {
|
||||
json[i] = err.JSON()
|
||||
}
|
||||
return json
|
||||
}
|
||||
}
|
||||
|
||||
func (a errorMsgs) String() string {
|
||||
if len(a) == 0 {
|
||||
return ""
|
||||
|
Loading…
Reference in New Issue
Block a user