var.go 682 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package eapi
  2. import (
  3. "encoding/json"
  4. "github.com/spf13/cast"
  5. )
  6. // Var is an universal variable type implementer.
  7. type Var struct {
  8. value interface{} // Underlying value.
  9. }
  10. // NewVar creates and returns a new Var with given `value`.
  11. func NewVar(value interface{}) *Var {
  12. return &Var{
  13. value: value,
  14. }
  15. }
  16. // Bytes converts and returns `v` as []byte.
  17. func (v *Var) Bytes() ([]byte, error) {
  18. return json.Marshal(v.value)
  19. }
  20. // String converts and returns `v` as string.
  21. func (v *Var) String() string {
  22. return cast.ToString(v.value)
  23. }
  24. // Scan .
  25. func (v *Var) Scan(i any) (err error) {
  26. b, err := v.Bytes()
  27. if err = json.Unmarshal(b, &i); err != nil {
  28. return
  29. }
  30. return
  31. }