...
1
2
3
4
5 package binding
6
7 import (
8 "errors"
9 "net/http"
10 )
11
12 const defaultMemory = 32 << 20
13
14 type formBinding struct{}
15 type formPostBinding struct{}
16 type formMultipartBinding struct{}
17
18 func (formBinding) Name() string {
19 return "form"
20 }
21
22 func (formBinding) Bind(req *http.Request, obj any) error {
23 if err := req.ParseForm(); err != nil {
24 return err
25 }
26 if err := req.ParseMultipartForm(defaultMemory); err != nil && !errors.Is(err, http.ErrNotMultipart) {
27 return err
28 }
29 if err := mapForm(obj, req.Form); err != nil {
30 return err
31 }
32 return validate(obj)
33 }
34
35 func (formPostBinding) Name() string {
36 return "form-urlencoded"
37 }
38
39 func (formPostBinding) Bind(req *http.Request, obj any) error {
40 if err := req.ParseForm(); err != nil {
41 return err
42 }
43 if err := mapForm(obj, req.PostForm); err != nil {
44 return err
45 }
46 return validate(obj)
47 }
48
49 func (formMultipartBinding) Name() string {
50 return "multipart/form-data"
51 }
52
53 func (formMultipartBinding) Bind(req *http.Request, obj any) error {
54 if err := req.ParseMultipartForm(defaultMemory); err != nil {
55 return err
56 }
57 if err := mappingByPtr(obj, (*multipartRequest)(req), "form"); err != nil {
58 return err
59 }
60
61 return validate(obj)
62 }
63
View as plain text