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.
110 lines
1.9 KiB
110 lines
1.9 KiB
package jx |
|
|
|
import "io" |
|
|
|
// Writer writes json tokens to underlying buffer. |
|
// |
|
// Zero value is valid. |
|
type Writer struct { |
|
Buf []byte // underlying buffer |
|
} |
|
|
|
// Write implements io.Writer. |
|
func (w *Writer) Write(p []byte) (n int, err error) { |
|
w.Buf = append(w.Buf, p...) |
|
return len(p), nil |
|
} |
|
|
|
// WriteTo implements io.WriterTo. |
|
func (w *Writer) WriteTo(t io.Writer) (n int64, err error) { |
|
wrote, err := t.Write(w.Buf) |
|
return int64(wrote), err |
|
} |
|
|
|
// String returns string of underlying buffer. |
|
func (w Writer) String() string { |
|
return string(w.Buf) |
|
} |
|
|
|
// Reset resets underlying buffer. |
|
func (w *Writer) Reset() { |
|
w.Buf = w.Buf[:0] |
|
} |
|
|
|
// byte writes a single byte. |
|
func (w *Writer) byte(c byte) { |
|
w.Buf = append(w.Buf, c) |
|
} |
|
|
|
func (w *Writer) twoBytes(c1, c2 byte) { |
|
w.Buf = append(w.Buf, c1, c2) |
|
} |
|
|
|
// RawStr writes string as raw json. |
|
func (w *Writer) RawStr(v string) { |
|
w.rawStr(v) |
|
} |
|
|
|
func (w *Writer) rawStr(v string) { |
|
w.Buf = append(w.Buf, v...) |
|
} |
|
|
|
// Raw writes byte slice as raw json. |
|
func (w *Writer) Raw(b []byte) { |
|
w.Buf = append(w.Buf, b...) |
|
} |
|
|
|
// Null writes null. |
|
func (w *Writer) Null() { |
|
w.Buf = append(w.Buf, "null"...) |
|
} |
|
|
|
// True writes true. |
|
func (w *Writer) True() { |
|
w.Buf = append(w.Buf, "true"...) |
|
} |
|
|
|
// False writes false. |
|
func (w *Writer) False() { |
|
w.Buf = append(w.Buf, "false"...) |
|
} |
|
|
|
// Bool encodes boolean. |
|
func (w *Writer) Bool(v bool) { |
|
if v { |
|
w.True() |
|
} else { |
|
w.False() |
|
} |
|
} |
|
|
|
// ObjStart writes object start. |
|
func (w *Writer) ObjStart() { |
|
w.byte('{') |
|
} |
|
|
|
// FieldStart encodes field name and writes colon. |
|
func (w *Writer) FieldStart(field string) { |
|
w.Str(field) |
|
w.byte(':') |
|
} |
|
|
|
// ObjEnd writes end of object token. |
|
func (w *Writer) ObjEnd() { |
|
w.byte('}') |
|
} |
|
|
|
// ArrStart writes start of array. |
|
func (w *Writer) ArrStart() { |
|
w.byte('[') |
|
} |
|
|
|
// ArrEnd writes end of array. |
|
func (w *Writer) ArrEnd() { |
|
w.byte(']') |
|
} |
|
|
|
// Comma writes comma. |
|
func (w *Writer) Comma() { |
|
w.byte(',') |
|
}
|
|
|