azkustodata/value/real.go (58 lines of code) (raw):

package value import ( "encoding/json" "github.com/Azure/azure-kusto-go/azkustodata/types" "reflect" "strconv" ) // Real represents a Kusto real type. Real implements Kusto. type Real struct { pointerValue[float64] } func NewReal(i float64) *Real { return &Real{newPointerValue[float64](&i)} } func NewNullReal() *Real { return &Real{newPointerValue[float64](nil)} } // Unmarshal unmarshals i into Real. i must be a json.Number(that is a float64), float64 or nil. func (r *Real) Unmarshal(i interface{}) error { if i == nil { r.value = nil return nil } var myFloat float64 switch v := i.(type) { case json.Number: var err error myFloat, err = v.Float64() if err != nil { return parseError(r, i, err) } case float64: myFloat = v case string: var err error myFloat, err = strconv.ParseFloat(v, 64) if err != nil { return parseError(r, i, err) } default: return convertError(r, i) } r.value = &myFloat return nil } // Convert Real into reflect value. func (r *Real) Convert(v reflect.Value) error { if TryConvert[float64](*r, &r.pointerValue, v) { return nil } if v.Type().Kind() == reflect.Int || v.Type().Kind() == reflect.Int32 { if r.value != nil { v.SetInt(int64(*r.value)) } return nil } return convertError(r, v) } // GetType returns the type of the value. func (r *Real) GetType() types.Column { return types.Real }