package jsoniter

import (
	
	
	
)

var jsonRawMessageType = reflect2.TypeOfPtr((*json.RawMessage)(nil)).Elem()
var jsoniterRawMessageType = reflect2.TypeOfPtr((*RawMessage)(nil)).Elem()

func createEncoderOfJsonRawMessage( *ctx,  reflect2.Type) ValEncoder {
	if  == jsonRawMessageType {
		return &jsonRawMessageCodec{}
	}
	if  == jsoniterRawMessageType {
		return &jsoniterRawMessageCodec{}
	}
	return nil
}

func createDecoderOfJsonRawMessage( *ctx,  reflect2.Type) ValDecoder {
	if  == jsonRawMessageType {
		return &jsonRawMessageCodec{}
	}
	if  == jsoniterRawMessageType {
		return &jsoniterRawMessageCodec{}
	}
	return nil
}

type jsonRawMessageCodec struct {
}

func ( *jsonRawMessageCodec) ( unsafe.Pointer,  *Iterator) {
	if .ReadNil() {
		*((*json.RawMessage)()) = nil
	} else {
		*((*json.RawMessage)()) = .SkipAndReturnBytes()
	}
}

func ( *jsonRawMessageCodec) ( unsafe.Pointer,  *Stream) {
	if *((*json.RawMessage)()) == nil {
		.WriteNil()
	} else {
		.WriteRaw(string(*((*json.RawMessage)())))
	}
}

func ( *jsonRawMessageCodec) ( unsafe.Pointer) bool {
	return len(*((*json.RawMessage)())) == 0
}

type jsoniterRawMessageCodec struct {
}

func ( *jsoniterRawMessageCodec) ( unsafe.Pointer,  *Iterator) {
	if .ReadNil() {
		*((*RawMessage)()) = nil
	} else {
		*((*RawMessage)()) = .SkipAndReturnBytes()
	}
}

func ( *jsoniterRawMessageCodec) ( unsafe.Pointer,  *Stream) {
	if *((*RawMessage)()) == nil {
		.WriteNil()
	} else {
		.WriteRaw(string(*((*RawMessage)())))
	}
}

func ( *jsoniterRawMessageCodec) ( unsafe.Pointer) bool {
	return len(*((*RawMessage)())) == 0
}