package govaluate // sanitizedParameters is a wrapper for Parameters that does sanitization as // parameters are accessed. type sanitizedParameters struct { orig Parameters } func (p sanitizedParameters) Get(key string) (interface{}, error) { value, err := p.orig.Get(key) if err != nil { return nil, err } // should be converted to fixed point? if isFixedPoint(value) { return castFixedPoint(value), nil } return value, nil } func isFixedPoint(value interface{}) bool { switch value.(type) { case uint8: return true case uint16: return true case uint32: return true case uint64: return true case int8: return true case int16: return true case int32: return true case int64: return true case int: return true } return false } func castFixedPoint(value interface{}) float64 { switch value.(type) { case uint8: return float64(value.(uint8)) case uint16: return float64(value.(uint16)) case uint32: return float64(value.(uint32)) case uint64: return float64(value.(uint64)) case int8: return float64(value.(int8)) case int16: return float64(value.(int16)) case int32: return float64(value.(int32)) case int64: return float64(value.(int64)) case int: return float64(value.(int)) } return 0.0 }