aboutsummaryrefslogtreecommitdiff
path: root/bencode
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-06-11 03:14:01 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-06-11 03:14:01 +0200
commit6249b7297c416be3a23c51b693c72fae61896799 (patch)
treeb4cc0b35de0e5946e8779ee64f09883a66dec081 /bencode
parent4563480e23dafa469cc0c9a3d1b89358861cce3a (diff)
omit empty
Diffstat (limited to 'bencode')
-rw-r--r--bencode/bencode.go18
1 files changed, 16 insertions, 2 deletions
diff --git a/bencode/bencode.go b/bencode/bencode.go
index 0d536d3..4dcc1ff 100644
--- a/bencode/bencode.go
+++ b/bencode/bencode.go
@@ -64,12 +64,26 @@ func marshalDict(out io.Writer, v reflect.Value) {
if name == "" {
name = f.Name
}
- marshalString(out, name)
- marshalField(out, v.Field(i))
+ if !isEmpty(v.Field(i)) {
+ marshalString(out, name)
+ marshalField(out, v.Field(i))
+ }
}
io.WriteString(out, "e")
}
+func isEmpty(v reflect.Value) bool {
+ switch v.Kind() {
+ case reflect.Int:
+ return v.Int() == 0
+ case reflect.String, reflect.Slice:
+ return v.Len() == 0
+ case reflect.Interface, reflect.Ptr:
+ return v.IsNil()
+ }
+ return false
+}
+
func marshalList(out io.Writer, v reflect.Value) {
switch v.Type().Elem().Kind() {
case reflect.Uint8: