5 "github.com/modern-go/reflect2"
9 var jsonRawMessageType = reflect2.TypeOfPtr((*json.RawMessage)(nil)).Elem()
10 var jsoniterRawMessageType = reflect2.TypeOfPtr((*RawMessage)(nil)).Elem()
12 func createEncoderOfJsonRawMessage(ctx *ctx, typ reflect2.Type) ValEncoder {
13 if typ == jsonRawMessageType {
14 return &jsonRawMessageCodec{}
16 if typ == jsoniterRawMessageType {
17 return &jsoniterRawMessageCodec{}
22 func createDecoderOfJsonRawMessage(ctx *ctx, typ reflect2.Type) ValDecoder {
23 if typ == jsonRawMessageType {
24 return &jsonRawMessageCodec{}
26 if typ == jsoniterRawMessageType {
27 return &jsoniterRawMessageCodec{}
32 type jsonRawMessageCodec struct {
35 func (codec *jsonRawMessageCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
36 *((*json.RawMessage)(ptr)) = json.RawMessage(iter.SkipAndReturnBytes())
39 func (codec *jsonRawMessageCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
40 stream.WriteRaw(string(*((*json.RawMessage)(ptr))))
43 func (codec *jsonRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool {
44 return len(*((*json.RawMessage)(ptr))) == 0
47 type jsoniterRawMessageCodec struct {
50 func (codec *jsoniterRawMessageCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
51 *((*RawMessage)(ptr)) = RawMessage(iter.SkipAndReturnBytes())
54 func (codec *jsoniterRawMessageCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
55 stream.WriteRaw(string(*((*RawMessage)(ptr))))
58 func (codec *jsoniterRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool {
59 return len(*((*RawMessage)(ptr))) == 0