aboutsummaryrefslogtreecommitdiff
path: root/tracker
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
parent94862d12fcbf0fe2ba7c512e1220638c9f677362 (diff)
Split query
Diffstat (limited to 'tracker')
-rw-r--r--tracker/query.go61
-rw-r--r--tracker/query_test.go24
2 files changed, 0 insertions, 85 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
-}
diff --git a/tracker/query_test.go b/tracker/query_test.go
deleted file mode 100644
index bd9a174..0000000
--- a/tracker/query_test.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package tracker
-
-import "testing"
-
-func TestMarshalQuery(t *testing.T) {
- q := struct {
- A string `query:"x"`
- B int
- C string `query:",optional"`
- D []byte
- }{
- A: "test",
- B: 100,
- D: []byte{1, 2, 3},
- }
- v, err := MarshalQuery(q)
- if err != nil {
- t.Error(err)
- }
- if v != "?b=100&d=%01%02%03&x=test" {
- t.Error("wrong result", v)
- }
-
-}