diff --git a/frontend/http/bencode/encoder.go b/frontend/http/bencode/encoder.go index 9038e99..ce6d4f6 100644 --- a/frontend/http/bencode/encoder.go +++ b/frontend/http/bencode/encoder.go @@ -89,6 +89,13 @@ func marshal(w io.Writer, data interface{}) (err error) { case []interface{}: err = marshalList(w, v) + case []Dict: + var interfaceSlice = make([]interface{}, len(v)) + for i, d := range v { + interfaceSlice[i] = d + } + err = marshalList(w, interfaceSlice) + default: return fmt.Errorf("attempted to marshal unsupported type:\n%T", v) } diff --git a/frontend/http/bencode/encoder_test.go b/frontend/http/bencode/encoder_test.go index bbd89b1..783032b 100644 --- a/frontend/http/bencode/encoder_test.go +++ b/frontend/http/bencode/encoder_test.go @@ -30,6 +30,8 @@ var marshalTests = []struct { {map[string]interface{}{"one": "aa", "two": "bb"}, []string{"d3:one2:aa3:two2:bbe", "d3:two2:bb3:one2:aae"}}, {map[string]interface{}{}, []string{"de"}}, + + {[]Dict{{"a": "b"}, {"c": "d"}}, []string{"ld1:a1:bed1:c1:dee", "ld1:c1:ded1:a1:bee"}}, } func TestMarshal(t *testing.T) {