in internal/apiquery/encoder.go [278:328]
func (e *encoder) newArrayTypeEncoder(t reflect.Type) encoderFunc {
switch e.settings.ArrayFormat {
case ArrayQueryFormatComma:
innerEncoder := e.typeEncoder(t.Elem())
return func(key string, v reflect.Value) ([]Pair, error) {
elements := []string{}
for i := 0; i < v.Len(); i++ {
innerPairs, err := innerEncoder("", v.Index(i))
if err != nil {
return nil, err
}
for _, pair := range innerPairs {
elements = append(elements, pair.value)
}
}
if len(elements) == 0 {
return []Pair{}, nil
}
return []Pair{{key, strings.Join(elements, ",")}}, nil
}
case ArrayQueryFormatRepeat:
innerEncoder := e.typeEncoder(t.Elem())
return func(key string, value reflect.Value) (pairs []Pair, err error) {
for i := 0; i < value.Len(); i++ {
subpairs, suberr := innerEncoder(key, value.Index(i))
if suberr != nil {
err = suberr
}
pairs = append(pairs, subpairs...)
}
return
}
case ArrayQueryFormatIndices:
panic("The array indices format is not supported yet")
case ArrayQueryFormatBrackets:
innerEncoder := e.typeEncoder(t.Elem())
return func(key string, value reflect.Value) (pairs []Pair, err error) {
pairs = []Pair{}
for i := 0; i < value.Len(); i++ {
subpairs, suberr := innerEncoder(key+"[]", value.Index(i))
if suberr != nil {
err = suberr
}
pairs = append(pairs, subpairs...)
}
return
}
default:
panic(fmt.Sprintf("Unknown ArrayFormat value: %d", e.settings.ArrayFormat))
}
}