query.go raw
1 package parameter
2
3 import (
4 "fmt"
5 "net"
6 "net/url"
7 "reflect"
8 "time"
9
10 "github.com/scaleway/scaleway-sdk-go/scw"
11 )
12
13 // AddToQuery add a key/value pair to an URL query
14 func AddToQuery(query url.Values, key string, value any) {
15 elemValue := reflect.ValueOf(value)
16
17 if elemValue.Kind() == reflect.Invalid || elemValue.Kind() == reflect.Ptr && elemValue.IsNil() {
18 return
19 }
20
21 for elemValue.Kind() == reflect.Ptr {
22 elemValue = reflect.ValueOf(value).Elem()
23 }
24
25 elemType := elemValue.Type()
26 switch {
27 case elemType == reflect.TypeOf(net.IP{}):
28 query.Add(key, value.(*net.IP).String())
29 case elemType == reflect.TypeOf(net.IPNet{}):
30 query.Add(key, value.(*net.IPNet).String())
31 case elemType == reflect.TypeOf(scw.IPNet{}):
32 query.Add(key, value.(*scw.IPNet).String())
33 case elemType.Kind() == reflect.Slice:
34 for i := 0; i < elemValue.Len(); i++ {
35 query.Add(key, fmt.Sprint(elemValue.Index(i).Interface()))
36 }
37 case elemType == reflect.TypeOf(time.Time{}):
38 query.Add(key, value.(*time.Time).Format(time.RFC3339))
39 default:
40 query.Add(key, fmt.Sprint(elemValue.Interface()))
41 }
42 }
43