in pulsar/primitiveSerDe.go [176:202]
func (b BinaryFreeList) PutFloat(datum interface{}) ([]byte, error) {
var value float32
switch v := datum.(type) {
case float32:
value = v
case float64:
value = float32(v)
case int:
if value = float32(v); int(value) != v {
return nil, fmt.Errorf("serialize failed: provided Go int would lose precision: %d", v)
}
case int64:
if value = float32(v); int64(value) != v {
return nil, fmt.Errorf("serialize failed: provided Go int64 would lose precision: %d", v)
}
case int32:
if value = float32(v); int32(value) != v {
return nil, fmt.Errorf("serialize failed: provided Go int32 would lose precision: %d", v)
}
default:
return nil, fmt.Errorf("serialize failed: expected: Go numeric; received: %T", datum)
}
var buf []byte
buf = append(buf, 0, 0, 0, 0)
binary.BigEndian.PutUint32(buf[len(buf)-4:], math.Float32bits(value))
return buf, nil
}