(b []byte, p unsafe.Pointer)
| 439 | } |
| 440 | |
| 441 | func (e encoder) encodeMapStringRawMessage(b []byte, p unsafe.Pointer) ([]byte, error) { |
| 442 | m := *(*map[string]RawMessage)(p) |
| 443 | if m == nil { |
| 444 | return append(b, "null"...), nil |
| 445 | } |
| 446 | |
| 447 | if (e.flags & SortMapKeys) == 0 { |
| 448 | // Optimized code path when the program does not need the map keys to be |
| 449 | // sorted. |
| 450 | b = append(b, '{') |
| 451 | |
| 452 | if len(m) != 0 { |
| 453 | var err error |
| 454 | i := 0 |
| 455 | |
| 456 | for k, v := range m { |
| 457 | if i != 0 { |
| 458 | b = append(b, ',') |
| 459 | } |
| 460 | |
| 461 | // encodeString doesn't return errors so we ignore it here |
| 462 | b, _ = e.encodeString(b, unsafe.Pointer(&k)) |
| 463 | b = append(b, ':') |
| 464 | |
| 465 | b, err = e.encodeRawMessage(b, unsafe.Pointer(&v)) |
| 466 | if err != nil { |
| 467 | break |
| 468 | } |
| 469 | |
| 470 | i++ |
| 471 | } |
| 472 | } |
| 473 | |
| 474 | b = append(b, '}') |
| 475 | return b, nil |
| 476 | } |
| 477 | |
| 478 | s := mapslicePool.Get().(*mapslice) |
| 479 | if cap(s.elements) < len(m) { |
| 480 | s.elements = make([]element, 0, align(10, uintptr(len(m)))) |
| 481 | } |
| 482 | for key, raw := range m { |
| 483 | s.elements = append(s.elements, element{key: key, raw: raw}) |
| 484 | } |
| 485 | sort.Sort(s) |
| 486 | |
| 487 | start := len(b) |
| 488 | var err error |
| 489 | b = append(b, '{') |
| 490 | |
| 491 | for i, elem := range s.elements { |
| 492 | if i != 0 { |
| 493 | b = append(b, ',') |
| 494 | } |
| 495 | |
| 496 | b, _ = e.encodeString(b, unsafe.Pointer(&elem.key)) |
| 497 | b = append(b, ':') |
| 498 |
nothing calls this directly
no test coverage detected