Browse Source

Add error to return of Reader

master v0.1.0
Nise Void 2 years ago
parent
commit
a16ee2740c
Signed by: NiseVoid GPG Key ID: FBA14AC83EA602F3
2 changed files with 12 additions and 8 deletions
  1. +3
    -4
      default.go
  2. +9
    -4
      router.go

+ 3
- 4
default.go 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
}

+ 9
- 4
router.go 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()})


Loading…
Cancel
Save