7 "github.com/vmihailenco/msgpack/codes"
10 func encodeMapValue(e *Encoder, v reflect.Value) error {
15 if err := e.EncodeMapLen(v.Len()); err != nil {
19 for _, key := range v.MapKeys() {
20 if err := e.EncodeValue(key); err != nil {
23 if err := e.EncodeValue(v.MapIndex(key)); err != nil {
31 func encodeMapStringStringValue(e *Encoder, v reflect.Value) error {
36 if err := e.EncodeMapLen(v.Len()); err != nil {
40 m := v.Convert(mapStringStringType).Interface().(map[string]string)
42 return e.encodeSortedMapStringString(m)
45 for mk, mv := range m {
46 if err := e.EncodeString(mk); err != nil {
49 if err := e.EncodeString(mv); err != nil {
57 func encodeMapStringInterfaceValue(e *Encoder, v reflect.Value) error {
62 if err := e.EncodeMapLen(v.Len()); err != nil {
66 m := v.Convert(mapStringInterfaceType).Interface().(map[string]interface{})
68 return e.encodeSortedMapStringInterface(m)
71 for mk, mv := range m {
72 if err := e.EncodeString(mk); err != nil {
75 if err := e.Encode(mv); err != nil {
83 func (e *Encoder) encodeSortedMapStringString(m map[string]string) error {
84 keys := make([]string, 0, len(m))
86 keys = append(keys, k)
90 for _, k := range keys {
91 err := e.EncodeString(k)
95 if err = e.EncodeString(m[k]); err != nil {
103 func (e *Encoder) encodeSortedMapStringInterface(m map[string]interface{}) error {
104 keys := make([]string, 0, len(m))
105 for k, _ := range m {
106 keys = append(keys, k)
110 for _, k := range keys {
111 err := e.EncodeString(k)
115 if err = e.Encode(m[k]); err != nil {
123 func (e *Encoder) EncodeMapLen(l int) error {
125 return e.writeCode(codes.FixedMapLow | codes.Code(l))
128 return e.write2(codes.Map16, uint16(l))
130 return e.write4(codes.Map32, uint32(l))
133 func encodeStructValue(e *Encoder, strct reflect.Value) error {
134 var structFields *fields
136 structFields = jsonStructs.Fields(strct.Type())
138 structFields = structs.Fields(strct.Type())
141 if e.structAsArray || structFields.AsArray {
142 return encodeStructValueAsArray(e, strct, structFields.List)
144 fields := structFields.OmitEmpty(strct)
146 if err := e.EncodeMapLen(len(fields)); err != nil {
150 for _, f := range fields {
151 if err := e.EncodeString(f.name); err != nil {
154 if err := f.EncodeValue(e, strct); err != nil {
162 func encodeStructValueAsArray(e *Encoder, strct reflect.Value, fields []*field) error {
163 if err := e.EncodeArrayLen(len(fields)); err != nil {
166 for _, f := range fields {
167 if err := f.EncodeValue(e, strct); err != nil {