github.com/hellobchain/third_party@v0.0.0-20230331131523-deb0478a2e52/gin/binding/header.go (about) 1 package binding 2 3 import ( 4 "github.com/hellobchain/newcryptosm/http" 5 "net/textproto" 6 "reflect" 7 ) 8 9 type headerBinding struct{} 10 11 func (headerBinding) Name() string { 12 return "header" 13 } 14 15 func (headerBinding) Bind(req *http.Request, obj interface{}) error { 16 17 if err := mapHeader(obj, req.Header); err != nil { 18 return err 19 } 20 21 return validate(obj) 22 } 23 24 func mapHeader(ptr interface{}, h map[string][]string) error { 25 return mappingByPtr(ptr, headerSource(h), "header") 26 } 27 28 type headerSource map[string][]string 29 30 var _ setter = headerSource(nil) 31 32 func (hs headerSource) TrySet(value reflect.Value, field reflect.StructField, tagValue string, opt setOptions) (isSetted bool, err error) { 33 return setByForm(value, field, hs, textproto.CanonicalMIMEHeaderKey(tagValue), opt) 34 }