package codec import ( "fmt" "net/http" "net/url" "reflect" ) type queryCodec struct { values url.Values } // NewQueryCodec ... func NewQueryCodec(r *http.Request) *queryCodec { c := &queryCodec{values: r.URL.Query()} return c } // Decode ... func (c *queryCodec) Decode(field reflect.StructField, fv reflect.Value, tag *Tag) error { v := c.values[tag.Name] if len(v) == 0 { return nil } rv, err := getFieldValue(field.Type, tag, v) if err != nil { return err } if !rv.IsValid() { return fmt.Errorf("%s not valid", rv) } fv.Set(rv) return nil }