From 3dc50f53ca79d9a86c9ffd0ea3f6eb71bb9d1d71 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 17 Jun 2016 23:54:29 +0200 Subject: parse params --- tracker/query.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'tracker/query.go') diff --git a/tracker/query.go b/tracker/query.go index c042c55..5f9e695 100644 --- a/tracker/query.go +++ b/tracker/query.go @@ -25,6 +25,23 @@ func MarshalQuery(v interface{}) (string, error) { 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 isEmtpy(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") @@ -33,7 +50,14 @@ func marshalQuery(v reflect.Value) (string, error) { 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" && isEmtpy(f) { + continue + } switch f.Kind() { case reflect.Int: q.Add(name, strconv.Itoa(int(f.Int()))) -- cgit v1.2.3