better handling of empty values in slices/arrays if the slice or array has no values, skip it entirely. This fixes an issue where a struct field with a custom delimiter was included in the returned url.Values with an empty string rather than being omitted entirely (as is the case when there is no custom delimiter) fixes #57
diff --git a/query/encode.go b/query/encode.go index 1642207..9f2a8ec 100644 --- a/query/encode.go +++ b/query/encode.go
@@ -209,6 +209,11 @@ } if sv.Kind() == reflect.Slice || sv.Kind() == reflect.Array { + if sv.Len() == 0 { + // skip if slice or array is empty + continue + } + var del string if opts.Contains("comma") { del = ","
diff --git a/query/encode_test.go b/query/encode_test.go index 8487858..a94b44d 100644 --- a/query/encode_test.go +++ b/query/encode_test.go
@@ -144,12 +144,32 @@ url.Values{}, }, { + struct{ V []string }{[]string{}}, + url.Values{}, + }, + { + struct{ V []string }{[]string{""}}, + url.Values{"V": {""}}, + }, + { struct{ V []string }{[]string{"a", "b"}}, url.Values{"V": {"a", "b"}}, }, { struct { V []string `url:",comma"` + }{[]string{}}, + url.Values{}, + }, + { + struct { + V []string `url:",comma"` + }{[]string{""}}, + url.Values{"V": {""}}, + }, + { + struct { + V []string `url:",comma"` }{[]string{"a", "b"}}, url.Values{"V": {"a,b"}}, },