good morning!!!!

Skip to content
Snippets Groups Projects
Verified Commit 9dfe16e1 authored by a's avatar a
Browse files

a

parent ef620627
No related branches found
No related tags found
No related merge requests found
Pipeline #60425 passed
...@@ -2,6 +2,7 @@ package jjson ...@@ -2,6 +2,7 @@ package jjson
import ( import (
"bytes" "bytes"
"encoding/json"
"io" "io"
jsoniter "github.com/json-iterator/go" jsoniter "github.com/json-iterator/go"
...@@ -29,26 +30,48 @@ func MarshalAndEncode(w io.Writer, v any) error { ...@@ -29,26 +30,48 @@ func MarshalAndEncode(w io.Writer, v any) error {
func Encode(w io.Writer, v any) error { func Encode(w io.Writer, v any) error {
s := jConfig.BorrowStream(w) s := jConfig.BorrowStream(w)
defer jConfig.ReturnStream(s) defer jConfig.ReturnStream(s)
switch cast := (v).(type) {
case func(e *jsoniter.Stream):
cast(s)
return s.Flush()
case json.Marshaler:
s.WriteVal(v)
return s.Flush()
case io.Reader:
_, err := io.Copy(w, cast)
if err != nil {
return err
}
return nil
default:
s.WriteVal(v) s.WriteVal(v)
return s.Flush() return s.Flush()
} }
}
func Decode(r io.Reader, v any) error { func Decode(r io.Reader, v any) error {
d := jConfig.NewDecoder(r) d := jConfig.NewDecoder(r)
switch cast := (v).(type) {
case json.Unmarshaler:
return d.Decode(v) return d.Decode(v)
case io.Writer:
_, err := io.Copy(cast, r)
if err != nil {
return err
}
return nil
default:
return d.Decode(v)
}
} }
func Unmarshal(xs []byte, v any) error { func Unmarshal(xs []byte, v any) error {
d := jConfig.NewDecoder(bytes.NewBuffer(xs)) return Decode(bytes.NewBuffer(xs), v)
return d.Decode(v)
} }
func Marshal(v any) ([]byte, error) { func Marshal(v any) ([]byte, error) {
out := &bytes.Buffer{} out := &bytes.Buffer{}
s := jConfig.BorrowStream(out) err := Encode(out, v)
defer jConfig.ReturnStream(s)
s.WriteVal(v)
err := s.Flush()
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
...@@ -31,14 +31,6 @@ func EncodeObject(wr io.Writer, dat any) error { ...@@ -31,14 +31,6 @@ func EncodeObject(wr io.Writer, dat any) error {
} }
} }
return nil return nil
case json.Marshaler:
return jjson.Encode(wr, cast)
case io.Reader:
_, err := io.Copy(wr, cast)
if err != nil {
return err
}
return nil
default: default:
return jjson.Encode(wr, cast) return jjson.Encode(wr, cast)
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment