Add error to return of Reader

This commit is contained in:
Nise Void 2018-11-18 16:29:06 +01:00
parent 4c83818ecd
commit a16ee2740c
Signed by: NiseVoid
GPG Key ID: FBA14AC83EA602F3
2 changed files with 12 additions and 8 deletions

View File

@ -17,12 +17,11 @@ func defaultErrorHandler(c *Context, err interface{}) {
_ = c.StatusText(http.StatusInternalServerError)
}
func defaultReader(c *Context, dst interface{}) bool {
func defaultReader(c *Context, dst interface{}) (bool, error) {
err := json.NewDecoder(c.Request.Body).Decode(dst)
if err != nil {
c.NoContent(400)
return false
return false, c.StatusText(http.StatusBadRequest)
}
return true
return true, nil
}

View File

@ -24,7 +24,7 @@ type ErrorHandle func(*Context, interface{})
type Middleware func(Handle) Handle
// Binder reads input to dst, returns true is successful
type Reader func(c *Context, dst interface{}) bool
type Reader func(c *Context, dst interface{}) (bool, error)
// Router is the router itself
type Router struct {
@ -164,11 +164,16 @@ func handlePOST(r *Router, f interface{}) Handle {
return func(c *Context) error {
data := reflect.New(inputRt)
if !r.Reader(c, data.Interface()) {
if r.Reader != nil {
ok, err := r.Reader(c, data.Interface())
c.Request.Body.Close()
return nil
if err != nil {
return err
}
if !ok {
return nil
}
}
c.Request.Body.Close()
out := funcRv.Call([]reflect.Value{reflect.ValueOf(c), data.Elem()})