37 lines
609 B
Go
37 lines
609 B
Go
package nixmsg
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"io"
|
|
)
|
|
|
|
func marshalJSON(v any) ([]byte, error) {
|
|
var buf bytes.Buffer
|
|
enc := json.NewEncoder(&buf)
|
|
enc.SetEscapeHTML(false)
|
|
if err := enc.Encode(v); err != nil {
|
|
return nil, err
|
|
}
|
|
b := buf.Bytes()
|
|
if n := len(b); n > 0 && b[n-1] == '\n' {
|
|
b = b[:n-1]
|
|
}
|
|
return b, nil
|
|
}
|
|
|
|
func unmarshalJSON(data []byte, v any) error {
|
|
dec := json.NewDecoder(bytes.NewReader(data))
|
|
dec.UseNumber()
|
|
return dec.Decode(v)
|
|
}
|
|
|
|
func writeJSON(w io.Writer, v any) error {
|
|
b, err := marshalJSON(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = w.Write(b)
|
|
return err
|
|
}
|