package easyjson import ( "github.com/mailru/easyjson/jlexer" "github.com/mailru/easyjson/jwriter" ) // RawMessage is a raw piece of JSON (number, string, bool, object, array or // null) that is extracted without parsing and output as is during marshaling. type RawMessage []byte // MarshalEasyJSON does JSON marshaling using easyjson interface. func (v *RawMessage) MarshalEasyJSON(w *jwriter.Writer) { if len(*v) == 0 { w.RawString("null") } else { w.Raw(*v, nil) } } // UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. func (v *RawMessage) UnmarshalEasyJSON(l *jlexer.Lexer) { *v = RawMessage(l.Raw()) } // UnmarshalJSON implements encoding/json.Unmarshaler interface. func (v *RawMessage) UnmarshalJSON(data []byte) error { *v = data return nil } var nullBytes = []byte("null") // MarshalJSON implements encoding/json.Marshaler interface. func (v RawMessage) MarshalJSON() ([]byte, error) { if len(v) == 0 { return nullBytes, nil } return v, nil } // IsDefined is required for integration with omitempty easyjson logic. func (v *RawMessage) IsDefined() bool { return len(*v) > 0 }