52 lines
748 B
Go
52 lines
748 B
Go
|
|
package types
|
||
|
|
|
||
|
|
import "fmt"
|
||
|
|
|
||
|
|
type IntOrString struct {
|
||
|
|
intVal int
|
||
|
|
strVal string
|
||
|
|
isInt bool
|
||
|
|
}
|
||
|
|
|
||
|
|
func (is *IntOrString) Set(val any) error {
|
||
|
|
switch v := val.(type) {
|
||
|
|
case int:
|
||
|
|
case int8:
|
||
|
|
case int16:
|
||
|
|
case int32:
|
||
|
|
case int64:
|
||
|
|
case uint:
|
||
|
|
case uint8:
|
||
|
|
case uint16:
|
||
|
|
case uint32:
|
||
|
|
is.isInt = true
|
||
|
|
is.intVal = int(v)
|
||
|
|
return nil
|
||
|
|
case string:
|
||
|
|
is.isInt = false
|
||
|
|
is.strVal = v
|
||
|
|
return nil
|
||
|
|
case []byte:
|
||
|
|
is.isInt = false
|
||
|
|
is.strVal = string(v)
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
//nolint:err113 // Temp skip
|
||
|
|
return fmt.Errorf("invalid type: %T", val)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (is IntOrString) IsZero() bool {
|
||
|
|
if is.isInt {
|
||
|
|
return is.intVal == 0
|
||
|
|
}
|
||
|
|
return is.strVal == ""
|
||
|
|
}
|
||
|
|
|
||
|
|
func (is IntOrString) Value() any {
|
||
|
|
if is.isInt {
|
||
|
|
return is.intVal
|
||
|
|
}
|
||
|
|
return is.strVal
|
||
|
|
}
|