type AdvancedFilterValue struct {
Type AdvancedFilterValueType `json:"-"`
BoolValue bool `json:"-"`
StringValue string `json:"-"`
NumberValue float64 `json:"-"`
}
// AdvancedFilterValueType represents the stored type of AdvancedFilterValue.
type AdvancedFilterValueType int64
const (
Bool AdvancedFilterValueType = iota // The AdvancedFilterValue holds an bool.
String // The AdvancedFilterValue holds a string.
Float64 // The AdvancedFilterValue holds a float64
)
func (filterValue *AdvancedFilterValue) UnmarshalJSON(value []byte) error {
if value[0] == '"' {
filterValue.Type = String
return json.Unmarshal(value, &filterValue.StringValue)
}
if value[0] == 't' || value[0] == 'T' || value[0] == 'f' || value[0] == 'F' {
filterValue.Type = Bool
return json.Unmarshal(value, &filterValue.BoolValue)
}
filterValue.Type = Float64
return json.Unmarshal(value, &filterValue.NumberValue)
}
func (filterValue *AdvancedFilterValue) MarshalJSON() ([]byte, error) {
switch filterValue.Type {
case Bool:
return json.Marshal(filterValue.BoolValue)
case String:
return json.Marshal(filterValue.StringValue)
case Float64:
return json.Marshal(filterValue.NumberValue)
default:
return []byte{}, fmt.Errorf("Invalid AdvancedFilterValue.Type")
}
}