// EncodeString encodes a string. func EncodeString(buf *bytes2.ChunkedWriter, key string, val string) { // Encode strings as binary; go strings are not necessarily unicode EncodePrefix(buf, Binary, key) putUint32(buf, uint32(len(val))) buf.WriteByte(0) buf.WriteString(val) }
// EncodeBool encodes a bool. func EncodeBool(buf *bytes2.ChunkedWriter, key string, val bool) { EncodePrefix(buf, Boolean, key) if val { buf.WriteByte(1) } else { buf.WriteByte(0) } }
func putUint64(buf *bytes2.ChunkedWriter, val uint64) { Pack.PutUint64(buf.Reserve(WORD64), val) }
func putUint32(buf *bytes2.ChunkedWriter, val uint32) { Pack.PutUint32(buf.Reserve(WORD32), val) }
// NewLenWriter returns a LenWriter that reserves the // bytes buf so they can store the length later. func NewLenWriter(buf *bytes2.ChunkedWriter) LenWriter { off := buf.Len() b := buf.Reserve(WORD32) return LenWriter{buf, off, b} }
// EncodeBinary encodes a []byte as binary. func EncodeBinary(buf *bytes2.ChunkedWriter, key string, val []byte) { EncodePrefix(buf, Binary, key) putUint32(buf, uint32(len(val))) buf.WriteByte(0) buf.Write(val) }
// EncodePrefix encodes key as prefix for the next object or value. func EncodePrefix(buf *bytes2.ChunkedWriter, etype byte, key string) { b := buf.Reserve(len(key) + 2) b[0] = etype copy(b[1:], key) b[len(b)-1] = 0 }