...
1
2
3
4
5 package binding
6
7 import (
8 "bytes"
9 "io"
10 "net/http"
11
12 "gopkg.in/yaml.v3"
13 )
14
15 type yamlBinding struct{}
16
17 func (yamlBinding) Name() string {
18 return "yaml"
19 }
20
21 func (yamlBinding) Bind(req *http.Request, obj any) error {
22 return decodeYAML(req.Body, obj)
23 }
24
25 func (yamlBinding) BindBody(body []byte, obj any) error {
26 return decodeYAML(bytes.NewReader(body), obj)
27 }
28
29 func decodeYAML(r io.Reader, obj any) error {
30 decoder := yaml.NewDecoder(r)
31 if err := decoder.Decode(obj); err != nil {
32 return err
33 }
34 return validate(obj)
35 }
36
View as plain text