Browse Source

Add error to return of Reader

pull/1/head v0.1.0
Nise Void 4 years ago
parent
commit
a16ee2740c
Signed by: NiseVoid
GPG Key ID: FBA14AC83EA602F3
  1. 7
      default.go
  2. 13
      router.go

7
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
}

13
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()})

Loading…
Cancel
Save