func PackMap(writer io.Writer, value *reflect.MapValue) (n int, err os.Error) { keys := value.Keys() if value.Len() < 16 { n, err := writer.Write([]byte{0x80 | byte(len(keys))}) if err != nil { return n, err } for _, k := range keys { _n, err := PackValue(writer, k) if err != nil { return n, err } n += _n _n, err = PackValue(writer, value.Elem(k)) if err != nil { return n, err } n += _n } } else if value.Len() < 65536 { n, err := writer.Write([]byte{0xde, byte(len(keys) >> 8), byte(len(keys))}) if err != nil { return n, err } for _, k := range keys { _n, err := PackValue(writer, k) if err != nil { return n, err } n += _n _n, err = PackValue(writer, value.Elem(k)) if err != nil { return n, err } n += _n } } else { n, err := writer.Write([]byte{0xdf, byte(len(keys) >> 24), byte(len(keys) >> 16), byte(len(keys) >> 8), byte(len(keys))}) if err != nil { return n, err } for _, k := range keys { _n, err := PackValue(writer, k) if err != nil { return n, err } n += _n _n, err = PackValue(writer, value.Elem(k)) if err != nil { return n, err } n += _n } } return n, nil }