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  }