summaryrefslogtreecommitdiff
path: root/compat/json/compat.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@datawire.io>2022-08-15 22:29:52 -0600
committerLuke Shumaker <lukeshu@datawire.io>2022-08-16 00:05:39 -0600
commit83ec1924ae051b60f911aa8b53b741c5371faaf8 (patch)
treef014234317559fe0d5c64a2df79d1a12efae6e38 /compat/json/compat.go
parent67b78f25f76b8ca43d837fb8055ca8e2b06c7d02 (diff)
Get borrowed_encode_test.go passing [ci-skip]
Diffstat (limited to 'compat/json/compat.go')
-rw-r--r--compat/json/compat.go44
1 files changed, 27 insertions, 17 deletions
diff --git a/compat/json/compat.go b/compat/json/compat.go
index 04dfb24..7145a86 100644
--- a/compat/json/compat.go
+++ b/compat/json/compat.go
@@ -29,35 +29,45 @@ type (
InvalidUnmarshalError = json.InvalidUnmarshalError // lowmemjson.DecodeArgumentError
// marshal errors
- InvalidUTF8Error = json.InvalidUTF8Error
- MarshalerError = lowmemjson.EncodeMethodError // expose a field
+ InvalidUTF8Error = json.InvalidUTF8Error
+ //MarshalerError = lowmemjson.EncodeMethodError // expose a field
UnsupportedTypeError = json.UnsupportedTypeError
UnsupportedValueError = json.UnsupportedValueError
)
-/////////////////////////////////////////////////////////////////////
+// Encode wrappers ///////////////////////////////////////////////////
-func MarshalIndent(v any, prefix, indent string) ([]byte, error) {
+func marshal(v any, formatter *lowmemjson.ReEncoder) ([]byte, error) {
var buf bytes.Buffer
- formatter := &lowmemjson.ReEncoder{
- Out: &buf,
+ formatter.Out = &buf
+ if err := lowmemjson.Encode(formatter, v); err != nil {
+ if me, ok := err.(*lowmemjson.EncodeMethodError); ok {
+ err = &MarshalerError{
+ Type: me.Type,
+ Err: me.Err,
+ sourceFunc: me.SourceFunc,
+ }
+ }
+ return nil, err
+ }
+ return buf.Bytes(), nil
+}
+
+func MarshalIndent(v any, prefix, indent string) ([]byte, error) {
+ return marshal(v, &lowmemjson.ReEncoder{
Indent: indent,
Prefix: prefix,
- }
- err := lowmemjson.Encode(formatter, v)
- return buf.Bytes(), err
+ })
}
func Marshal(v any) ([]byte, error) {
- var buf bytes.Buffer
- formatter := &lowmemjson.ReEncoder{
- Out: &buf,
+ return marshal(v, &lowmemjson.ReEncoder{
Compact: true,
- }
- err := lowmemjson.Encode(formatter, v)
- return buf.Bytes(), err
+ })
}
+// ReEncode wrappers /////////////////////////////////////////////////
+
func HTMLEscape(dst *bytes.Buffer, src []byte) {
formatter := &lowmemjson.ReEncoder{
Out: dst,
@@ -101,12 +111,12 @@ func Valid(data []byte) bool {
return err == nil
}
+// Decode wrappers ///////////////////////////////////////////////////
+
func Unmarshal(data []byte, ptr any) error {
return NewDecoder(bytes.NewReader(data)).Decode(ptr)
}
-/////////////////////////////////////////////////////////////////////
-
type Decoder struct {
*lowmemjson.Decoder
buf *bufio.Reader