|
@@ -1,6 +1,7 @@
|
|
package httpx
|
|
package httpx
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "fmt"
|
|
"io"
|
|
"io"
|
|
"net/http"
|
|
"net/http"
|
|
"strings"
|
|
"strings"
|
|
@@ -35,7 +36,21 @@ type Validator interface {
|
|
}
|
|
}
|
|
|
|
|
|
// Parse parses the request.
|
|
// Parse parses the request.
|
|
-func Parse(r *http.Request, v any) error {
|
|
|
|
|
|
+func Parse(r *http.Request, v any) (err error) {
|
|
|
|
+ defer func() {
|
|
|
|
+ r := recover()
|
|
|
|
+ if r == nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ tmp, ok := r.(error)
|
|
|
|
+ if ok {
|
|
|
|
+ err = tmp
|
|
|
|
+ } else {
|
|
|
|
+ err = fmt.Errorf("panic error: %v", r)
|
|
|
|
+ }
|
|
|
|
+ }()
|
|
|
|
+
|
|
if err := ParsePath(r, v); err != nil {
|
|
if err := ParsePath(r, v); err != nil {
|
|
return err
|
|
return err
|
|
}
|
|
}
|