query.go 910 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package apiquery
  2. import (
  3. "net/url"
  4. "reflect"
  5. "time"
  6. )
  7. func MarshalWithSettings(value interface{}, settings QuerySettings) url.Values {
  8. e := encoder{time.RFC3339, true, settings}
  9. kv := url.Values{}
  10. val := reflect.ValueOf(value)
  11. if !val.IsValid() {
  12. return nil
  13. }
  14. typ := val.Type()
  15. for _, pair := range e.typeEncoder(typ)("", val) {
  16. kv.Add(pair.key, pair.value)
  17. }
  18. return kv
  19. }
  20. func Marshal(value interface{}) url.Values {
  21. return MarshalWithSettings(value, QuerySettings{})
  22. }
  23. type Queryer interface {
  24. URLQuery() url.Values
  25. }
  26. type QuerySettings struct {
  27. NestedFormat NestedQueryFormat
  28. ArrayFormat ArrayQueryFormat
  29. }
  30. type NestedQueryFormat int
  31. const (
  32. NestedQueryFormatBrackets NestedQueryFormat = iota
  33. NestedQueryFormatDots
  34. )
  35. type ArrayQueryFormat int
  36. const (
  37. ArrayQueryFormatComma ArrayQueryFormat = iota
  38. ArrayQueryFormatRepeat
  39. ArrayQueryFormatIndices
  40. ArrayQueryFormatBrackets
  41. )