(b []byte, p unsafe.Pointer)
| 808 | } |
| 809 | |
| 810 | func (d decoder) decodeMapStringRawMessage(b []byte, p unsafe.Pointer) ([]byte, error) { |
| 811 | if hasNullPrefix(b) { |
| 812 | *(*unsafe.Pointer)(p) = nil |
| 813 | return b[4:], nil |
| 814 | } |
| 815 | |
| 816 | if len(b) < 2 || b[0] != '{' { |
| 817 | return d.inputError(b, mapStringRawMessageType) |
| 818 | } |
| 819 | |
| 820 | i := 0 |
| 821 | m := *(*map[string]RawMessage)(p) |
| 822 | |
| 823 | if m == nil { |
| 824 | m = make(map[string]RawMessage, 64) |
| 825 | } |
| 826 | |
| 827 | var err error |
| 828 | var key string |
| 829 | var val RawMessage |
| 830 | input := b |
| 831 | |
| 832 | b = b[1:] |
| 833 | for { |
| 834 | key = "" |
| 835 | val = nil |
| 836 | |
| 837 | b = skipSpaces(b) |
| 838 | |
| 839 | if len(b) != 0 && b[0] == '}' { |
| 840 | *(*unsafe.Pointer)(p) = *(*unsafe.Pointer)(unsafe.Pointer(&m)) |
| 841 | return b[1:], nil |
| 842 | } |
| 843 | |
| 844 | if i != 0 { |
| 845 | if len(b) == 0 { |
| 846 | return b, syntaxError(b, "unexpected end of JSON input after object field value") |
| 847 | } |
| 848 | if b[0] != ',' { |
| 849 | return b, syntaxError(b, "expected ',' after object field value but found '%c'", b[0]) |
| 850 | } |
| 851 | b = skipSpaces(b[1:]) |
| 852 | } |
| 853 | |
| 854 | if hasNullPrefix(b) { |
| 855 | return b, syntaxError(b, "cannot decode object key string from 'null' value") |
| 856 | } |
| 857 | |
| 858 | b, err = d.decodeString(b, unsafe.Pointer(&key)) |
| 859 | if err != nil { |
| 860 | return objectKeyError(b, err) |
| 861 | } |
| 862 | b = skipSpaces(b) |
| 863 | |
| 864 | if len(b) == 0 { |
| 865 | return b, syntaxError(b, "unexpected end of JSON input after object field key") |
| 866 | } |
| 867 | if b[0] != ':' { |
nothing calls this directly
no test coverage detected