Code refactoring for bpa operator
[icn.git] / cmd / bpa-operator / vendor / github.com / json-iterator / go / reflect_json_raw_message.go
1 package jsoniter
2
3 import (
4         "encoding/json"
5         "github.com/modern-go/reflect2"
6         "unsafe"
7 )
8
9 var jsonRawMessageType = reflect2.TypeOfPtr((*json.RawMessage)(nil)).Elem()
10 var jsoniterRawMessageType = reflect2.TypeOfPtr((*RawMessage)(nil)).Elem()
11
12 func createEncoderOfJsonRawMessage(ctx *ctx, typ reflect2.Type) ValEncoder {
13         if typ == jsonRawMessageType {
14                 return &jsonRawMessageCodec{}
15         }
16         if typ == jsoniterRawMessageType {
17                 return &jsoniterRawMessageCodec{}
18         }
19         return nil
20 }
21
22 func createDecoderOfJsonRawMessage(ctx *ctx, typ reflect2.Type) ValDecoder {
23         if typ == jsonRawMessageType {
24                 return &jsonRawMessageCodec{}
25         }
26         if typ == jsoniterRawMessageType {
27                 return &jsoniterRawMessageCodec{}
28         }
29         return nil
30 }
31
32 type jsonRawMessageCodec struct {
33 }
34
35 func (codec *jsonRawMessageCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
36         *((*json.RawMessage)(ptr)) = json.RawMessage(iter.SkipAndReturnBytes())
37 }
38
39 func (codec *jsonRawMessageCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
40         stream.WriteRaw(string(*((*json.RawMessage)(ptr))))
41 }
42
43 func (codec *jsonRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool {
44         return len(*((*json.RawMessage)(ptr))) == 0
45 }
46
47 type jsoniterRawMessageCodec struct {
48 }
49
50 func (codec *jsoniterRawMessageCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
51         *((*RawMessage)(ptr)) = RawMessage(iter.SkipAndReturnBytes())
52 }
53
54 func (codec *jsoniterRawMessageCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
55         stream.WriteRaw(string(*((*RawMessage)(ptr))))
56 }
57
58 func (codec *jsoniterRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool {
59         return len(*((*RawMessage)(ptr))) == 0
60 }