(v reflect.Value, rdser *Serializer, cache *ctagsWCache)
| 229 | } |
| 230 | |
| 231 | func (enc *Encoder) encodeMap(v reflect.Value, rdser *Serializer, cache *ctagsWCache) error { |
| 232 | keys := v.MapKeys() |
| 233 | |
| 234 | f := fieldInfo{} |
| 235 | for i, k := range keys { |
| 236 | keyName := "" |
| 237 | vv := v.MapIndex(k) |
| 238 | if i == 0 { |
| 239 | f = mkFieldInfo(vv, 0, reflect.StructField{}) |
| 240 | } |
| 241 | |
| 242 | switch k.Type().Kind() { |
| 243 | case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: |
| 244 | keyName = strconv.FormatInt(k.Int(), 10) |
| 245 | case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: |
| 246 | keyName = strconv.FormatUint(k.Uint(), 10) |
| 247 | case reflect.String: |
| 248 | keyName = k.String() |
| 249 | case reflect.Float32, reflect.Float64: |
| 250 | keyName = strconv.FormatFloat(k.Float(), 'g', -1, 64) |
| 251 | default: |
| 252 | panic(fmt.Errorf("Unsupported map key type %s ", k.Type().Kind().String())) |
| 253 | } |
| 254 | |
| 255 | f.ctagName = enc.name2tag(keyName) |
| 256 | err := enc.encodeValue(vv, rdser, f, cache) |
| 257 | if err != nil { |
| 258 | return err |
| 259 | } |
| 260 | } |
| 261 | return nil |
| 262 | } |
| 263 | |
| 264 | var hexCharToUint = [256]uint64{ |
| 265 | 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, |
no test coverage detected