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