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