Permalink
Cannot retrieve contributors at this time
31 lines (27 sloc)
1.15 KB
package echo | |
import ( | |
"encoding/json" | |
"fmt" | |
"net/http" | |
) | |
// DefaultJSONSerializer implements JSON encoding using encoding/json. | |
type DefaultJSONSerializer struct{} | |
// Serialize converts an interface into a json and writes it to the response. | |
// You can optionally use the indent parameter to produce pretty JSONs. | |
func (d DefaultJSONSerializer) Serialize(c Context, i interface{}, indent string) error { | |
enc := json.NewEncoder(c.Response()) | |
if indent != "" { | |
enc.SetIndent("", indent) | |
} | |
return enc.Encode(i) | |
} | |
// Deserialize reads a JSON from a request body and converts it into an interface. | |
func (d DefaultJSONSerializer) Deserialize(c Context, i interface{}) error { | |
err := json.NewDecoder(c.Request().Body).Decode(i) | |
if ute, ok := err.(*json.UnmarshalTypeError); ok { | |
return NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Unmarshal type error: expected=%v, got=%v, field=%v, offset=%v", ute.Type, ute.Value, ute.Field, ute.Offset)).SetInternal(err) | |
} else if se, ok := err.(*json.SyntaxError); ok { | |
return NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Syntax error: offset=%v, error=%v", se.Offset, se.Error())).SetInternal(err) | |
} | |
return err | |
} |