encode_value.go (4210B)
1 package msgpack 2 3 import "math" 4 5 func (e *Encoder) Nil() { 6 e.grow(1) 7 e.buf = append(e.buf, 0xc0) 8 } 9 10 func (e *Encoder) Bool(v bool) { 11 e.grow(1) 12 if v { 13 e.buf = append(e.buf, 0xc2) 14 } else { 15 e.buf = append(e.buf, 0xc3) 16 } 17 } 18 19 func (e *Encoder) Int(v int) { 20 switch { 21 case v > 0xffffffff: 22 e.Uint64(uint64(v)) 23 case v > 0xffff: 24 e.Uint32(uint32(v)) 25 case v > 0xff: 26 e.Uint16(uint16(v)) 27 case v > 0x7f: 28 e.Uint8(uint8(v)) 29 case v < -0x80000000: 30 e.Int64(int64(v)) 31 case v < -0x8000: 32 e.Int32(int32(v)) 33 case v < -0x80: 34 e.Int16(int16(v)) 35 case v < -32: 36 e.Int8(int8(v)) 37 default: 38 e.grow(1) 39 e.buf = append(e.buf, byte(v)) 40 } 41 } 42 43 func (e *Encoder) Int8(v int8) { 44 e.grow(2) 45 e.buf = append(e.buf, 0xd0, byte(v)) 46 } 47 48 func (e *Encoder) Int16(v int16) { 49 e.grow(3) 50 e.buf = append(e.buf, 0xd1) 51 e.serialize16(uint16(v)) 52 } 53 54 func (e *Encoder) Int32(v int32) { 55 e.grow(5) 56 e.buf = append(e.buf, 0xd2) 57 e.serialize32(uint32(v)) 58 } 59 60 func (e *Encoder) Int64(v int64) { 61 e.grow(9) 62 e.buf = append(e.buf, 0xd3) 63 e.serialize64(uint64(v)) 64 } 65 66 func (e *Encoder) Uint(v uint) { 67 switch { 68 case v > 0xffffffff: 69 e.Uint64(uint64(v)) 70 case v > 0xffff: 71 e.Uint32(uint32(v)) 72 case v > 0xff: 73 e.Uint16(uint16(v)) 74 case v > 0x7f: 75 e.Uint8(uint8(v)) 76 default: 77 e.grow(1) 78 e.buf = append(e.buf, byte(v)) 79 } 80 } 81 82 func (e *Encoder) Uint8(v uint8) { 83 e.grow(2) 84 e.buf = append(e.buf, 0xcc, byte(v)) 85 } 86 87 func (e *Encoder) Uint16(v uint16) { 88 e.grow(3) 89 e.buf = append(e.buf, 0xcd) 90 e.serialize16(v) 91 } 92 93 func (e *Encoder) Uint32(v uint32) { 94 e.grow(5) 95 e.buf = append(e.buf, 0xce) 96 e.serialize32(v) 97 } 98 99 func (e *Encoder) Uint64(v uint64) { 100 e.grow(9) 101 e.buf = append(e.buf, 0xcf) 102 e.serialize64(v) 103 } 104 105 func (e *Encoder) Float32(v float32) { 106 b := math.Float32bits(v) 107 e.grow(5) 108 e.buf = append(e.buf, 0xca) 109 e.serialize32(b) 110 } 111 112 func (e *Encoder) Float64(v float64) { 113 b := math.Float64bits(v) 114 e.grow(9) 115 e.buf = append(e.buf, 0xcb) 116 e.serialize64(b) 117 } 118 119 func (e *Encoder) String(s string) { 120 switch { 121 case len(s) > 0xFFFF: 122 e.grow(len(s) + 5) 123 e.buf = append(e.buf, 0xdb) 124 e.serialize32(uint32(len(s))) 125 case len(s) > 0xFF: 126 e.grow(len(s) + 3) 127 e.buf = append(e.buf, 0xda) 128 e.serialize16(uint16(len(s))) 129 case len(s) > 31: 130 e.grow(len(s) + 2) 131 e.buf = append(e.buf, 0xd9, byte(len(s))) 132 default: 133 e.grow(len(s) + 1) 134 e.buf = append(e.buf, byte(0xa0|len(s))) 135 } 136 e.buf = append(e.buf, s...) 137 } 138 139 func (e *Encoder) Binary(s []byte) { 140 switch { 141 case len(s) > 0xFFFF: 142 e.grow(len(s) + 5) 143 e.buf = append(e.buf, 0xc6) 144 e.serialize32(uint32(len(s))) 145 case len(s) > 0xFF: 146 e.grow(len(s) + 3) 147 e.buf = append(e.buf, 0xc5) 148 e.serialize16(uint16(len(s))) 149 default: 150 e.grow(len(s) + 2) 151 e.buf = append(e.buf, 0xc4, byte(len(s))) 152 } 153 e.buf = append(e.buf, s...) 154 } 155 156 func (e *Encoder) Array(v Array) { 157 n := v.Len() 158 switch { 159 case n > 0xFFFF: 160 e.grow(5) 161 e.buf = append(e.buf, 0xdd) 162 e.serialize32(uint32(n)) 163 case n > 15: 164 e.grow(3) 165 e.buf = append(e.buf, 0xdc) 166 e.serialize16(uint16(n)) 167 default: 168 e.grow(1) 169 e.buf = append(e.buf, byte(0x90|n)) 170 } 171 172 v.EncodeMsgpackArray(e) 173 } 174 175 func (e *Encoder) Map(v Map) { 176 n := v.Size() 177 switch { 178 case n > 0xFFFF: 179 e.grow(5) 180 e.buf = append(e.buf, 0xdf) 181 e.serialize32(uint32(n)) 182 case n > 15: 183 e.grow(3) 184 e.buf = append(e.buf, 0xde) 185 e.serialize16(uint16(n)) 186 default: 187 e.grow(1) 188 e.buf = append(e.buf, byte(0x80|n)) 189 } 190 191 v.EncodeMsgpackMap(e) 192 } 193 194 func (e *Encoder) Ext(v Extension) { 195 var ( 196 typ = byte(v.Type()) 197 n = v.Size() 198 ) 199 switch { 200 case n == 1: 201 e.grow(3) 202 e.buf = append(e.buf, 0xd4, typ) 203 case n == 2: 204 e.grow(4) 205 e.buf = append(e.buf, 0xd5, typ) 206 case n == 4: 207 e.grow(6) 208 e.buf = append(e.buf, 0xd6, typ) 209 case n == 8: 210 e.grow(10) 211 e.buf = append(e.buf, 0xd7, typ) 212 case n == 16: 213 e.grow(18) 214 e.buf = append(e.buf, 0xd8, typ) 215 case n > 0xFFFF: 216 e.grow(6 + n) 217 e.buf = append(e.buf, 0xc9) 218 e.serialize32(uint32(n)) 219 e.buf = append(e.buf, typ) 220 case n > 0xFF: 221 e.grow(4 + n) 222 e.buf = append(e.buf, 0xc8) 223 e.serialize16(uint16(n)) 224 e.buf = append(e.buf, typ) 225 default: 226 e.grow(3 + n) 227 e.buf = append(e.buf, 0xc7, byte(n), typ) 228 } 229 v.EncodeMsgpackExt(e) 230 } 231 232 func (e *Encoder) Raw(p []byte) { 233 e.grow(len(p)) 234 e.buf = append(e.buf, p...) 235 }