Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.1 KiB
45 lines
1.1 KiB
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 |
|
}
|
|
|