aboutsummaryrefslogtreecommitdiff
path: root/tracker/query.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-07-14 19:04:20 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-07-14 19:04:20 +0200
commit7727cf2f9d64027e05cbd25466a0af6e25f628e0 (patch)
tree274c9bcc8abab981870d066a71919a714217dc85 /tracker/query.go
parent94862d12fcbf0fe2ba7c512e1220638c9f677362 (diff)
Split query
Diffstat (limited to 'tracker/query.go')
-rw-r--r--tracker/query.go61
1 files changed, 0 insertions, 61 deletions
diff --git a/tracker/query.go b/tracker/query.go
deleted file mode 100644
index 0ab56fc..0000000
--- a/tracker/query.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package tracker
-
-import (
- "errors"
- "net/url"
- "reflect"
- "strconv"
- "strings"
-)
-
-func MarshalQuery(v interface{}) (string, error) {
- val := reflect.ValueOf(v)
- return marshalQuery(val)
-}
-
-func parseTag(tag string) (string, string) {
- if i := strings.Index(tag, ","); i != -1 {
- return tag[:i], tag[i+1:]
- }
- return tag, ""
-}
-
-func isZero(v reflect.Value) bool {
- switch v.Kind() {
- case reflect.String:
- return v.String() == ""
- case reflect.Int:
- return v.Int() == 0
- }
- return false
-}
-
-func marshalQuery(v reflect.Value) (string, error) {
- if v.Kind() != reflect.Struct {
- return "", errors.New("must be a struct")
- }
- q := url.Values{}
- t := v.Type()
- for i := 0; i < t.NumField(); i++ {
- name := strings.ToLower(t.Field(i).Name)
- tag, param := parseTag(t.Field(i).Tag.Get("query"))
- if tag != "" {
- name = tag
- }
- f := v.Field(i)
- if param == "optional" && isZero(f) {
- continue
- }
- switch f.Kind() {
- case reflect.Int:
- q.Add(name, strconv.Itoa(int(f.Int())))
- case reflect.String:
- q.Add(name, f.String())
- case reflect.Slice:
- if f.Type().Elem().Kind() == reflect.Uint8 {
- q.Add(name, string(f.Bytes()))
- }
- }
- }
- return "?" + q.Encode(), nil
-}