From a16ee2740c0db7be61bdf48d9c491988d4e6c62f Mon Sep 17 00:00:00 2001 From: NiseVoid Date: Sun, 18 Nov 2018 16:29:06 +0100 Subject: [PATCH] Add error to return of Reader --- default.go | 7 +++---- router.go | 13 +++++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/default.go b/default.go index d36c6c8..ecda050 100644 --- a/default.go +++ b/default.go @@ -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 } diff --git a/router.go b/router.go index 79bbb71..04980c1 100644 --- a/router.go +++ b/router.go @@ -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()})