(b []byte, p unsafe.Pointer, t reflect.Type, encodeKey, encodeValue encodeFunc, sortKeys sortFunc)
| 306 | } |
| 307 | |
| 308 | func (e encoder) encodeMap(b []byte, p unsafe.Pointer, t reflect.Type, encodeKey, encodeValue encodeFunc, sortKeys sortFunc) ([]byte, error) { |
| 309 | m := reflect.NewAt(t, p).Elem() |
| 310 | if m.IsNil() { |
| 311 | return append(b, "null"...), nil |
| 312 | } |
| 313 | |
| 314 | keys := m.MapKeys() |
| 315 | if sortKeys != nil && (e.flags&SortMapKeys) != 0 { |
| 316 | sortKeys(keys) |
| 317 | } |
| 318 | |
| 319 | start := len(b) |
| 320 | var err error |
| 321 | b = append(b, '{') |
| 322 | |
| 323 | for i, k := range keys { |
| 324 | v := m.MapIndex(k) |
| 325 | |
| 326 | if i != 0 { |
| 327 | b = append(b, ',') |
| 328 | } |
| 329 | |
| 330 | if b, err = encodeKey(e, b, (*iface)(unsafe.Pointer(&k)).ptr); err != nil { |
| 331 | return b[:start], err |
| 332 | } |
| 333 | |
| 334 | b = append(b, ':') |
| 335 | |
| 336 | if b, err = encodeValue(e, b, (*iface)(unsafe.Pointer(&v)).ptr); err != nil { |
| 337 | return b[:start], err |
| 338 | } |
| 339 | } |
| 340 | |
| 341 | b = append(b, '}') |
| 342 | return b, nil |
| 343 | } |
| 344 | |
| 345 | type element struct { |
| 346 | key string |
no test coverage detected