package msgpack
import (
)
var stringSliceType = reflect.TypeOf(([]string)(nil))
func ( *Encoder, reflect.Value) error {
return .EncodeString(.String())
}
func ( *Encoder, reflect.Value) error {
return .EncodeBytes(.Bytes())
}
func ( *Encoder, reflect.Value) error {
if := .EncodeBytesLen(.Len()); != nil {
return
}
if .CanAddr() {
:= .Slice(0, .Len()).Bytes()
return .write()
}
.buf = grow(.buf, .Len())
reflect.Copy(reflect.ValueOf(.buf), )
return .write(.buf)
}
func ( []byte, int) []byte {
if cap() >= {
return [:]
}
= [:cap()]
= append(, make([]byte, -len())...)
return
}
func ( *Encoder) ( int) error {
if < 256 {
return .write1(msgpcode.Bin8, uint8())
}
if <= math.MaxUint16 {
return .write2(msgpcode.Bin16, uint16())
}
return .write4(msgpcode.Bin32, uint32())
}
func ( *Encoder) ( int) error {
if < 32 {
return .writeCode(msgpcode.FixedStrLow | byte())
}
if < 256 {
return .write1(msgpcode.Str8, uint8())
}
if <= math.MaxUint16 {
return .write2(msgpcode.Str16, uint16())
}
return .write4(msgpcode.Str32, uint32())
}
func ( *Encoder) ( string) error {
if := .flags&useInternedStringsFlag != 0; || len(.dict) > 0 {
return .encodeInternedString(, )
}
return .encodeNormalString()
}
func ( *Encoder) ( string) error {
if := .encodeStringLen(len()); != nil {
return
}
return .writeString()
}
func ( *Encoder) ( []byte) error {
if == nil {
return .EncodeNil()
}
if := .EncodeBytesLen(len()); != nil {
return
}
return .write()
}
func ( *Encoder) ( int) error {
if < 16 {
return .writeCode(msgpcode.FixedArrayLow | byte())
}
if <= math.MaxUint16 {
return .write2(msgpcode.Array16, uint16())
}
return .write4(msgpcode.Array32, uint32())
}
func ( *Encoder, reflect.Value) error {
:= .Convert(stringSliceType).Interface().([]string)
return .encodeStringSlice()
}
func ( *Encoder) ( []string) error {
if == nil {
return .EncodeNil()
}
if := .EncodeArrayLen(len()); != nil {
return
}
for , := range {
if := .EncodeString(); != nil {
return
}
}
return nil
}
func ( *Encoder, reflect.Value) error {
if .IsNil() {
return .EncodeNil()
}
return encodeArrayValue(, )
}
func ( *Encoder, reflect.Value) error {
:= .Len()
if := .EncodeArrayLen(); != nil {
return
}
for := 0; < ; ++ {
if := .EncodeValue(.Index()); != nil {
return
}
}
return nil
}