123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- package tengo
- import (
- "errors"
- )
- // Variable is a user-defined variable for the script.
- type Variable struct {
- name string
- value Object
- }
- // NewVariable creates a Variable.
- func NewVariable(name string, value interface{}) (*Variable, error) {
- obj, err := FromInterface(value)
- if err != nil {
- return nil, err
- }
- return &Variable{
- name: name,
- value: obj,
- }, nil
- }
- // Name returns the name of the variable.
- func (v *Variable) Name() string {
- return v.name
- }
- // Value returns an empty interface of the variable value.
- func (v *Variable) Value() interface{} {
- return ToInterface(v.value)
- }
- // ValueType returns the name of the value type.
- func (v *Variable) ValueType() string {
- return v.value.TypeName()
- }
- // Int returns int value of the variable value.
- // It returns 0 if the value is not convertible to int.
- func (v *Variable) Int() int {
- c, _ := ToInt(v.value)
- return c
- }
- // Int64 returns int64 value of the variable value. It returns 0 if the value
- // is not convertible to int64.
- func (v *Variable) Int64() int64 {
- c, _ := ToInt64(v.value)
- return c
- }
- // Float returns float64 value of the variable value. It returns 0.0 if the
- // value is not convertible to float64.
- func (v *Variable) Float() float64 {
- c, _ := ToFloat64(v.value)
- return c
- }
- // Char returns rune value of the variable value. It returns 0 if the value is
- // not convertible to rune.
- func (v *Variable) Char() rune {
- c, _ := ToRune(v.value)
- return c
- }
- // Bool returns bool value of the variable value. It returns 0 if the value is
- // not convertible to bool.
- func (v *Variable) Bool() bool {
- c, _ := ToBool(v.value)
- return c
- }
- // Array returns []interface value of the variable value. It returns 0 if the
- // value is not convertible to []interface.
- func (v *Variable) Array() []interface{} {
- switch val := v.value.(type) {
- case *Array:
- var arr []interface{}
- for _, e := range val.Value {
- arr = append(arr, ToInterface(e))
- }
- return arr
- }
- return nil
- }
- // Map returns map[string]interface{} value of the variable value. It returns
- // 0 if the value is not convertible to map[string]interface{}.
- func (v *Variable) Map() map[string]interface{} {
- switch val := v.value.(type) {
- case *Map:
- kv := make(map[string]interface{})
- for mk, mv := range val.Value {
- kv[mk] = ToInterface(mv)
- }
- return kv
- }
- return nil
- }
- // String returns string value of the variable value. It returns 0 if the value
- // is not convertible to string.
- func (v *Variable) String() string {
- c, _ := ToString(v.value)
- return c
- }
- // Bytes returns a byte slice of the variable value. It returns nil if the
- // value is not convertible to byte slice.
- func (v *Variable) Bytes() []byte {
- c, _ := ToByteSlice(v.value)
- return c
- }
- // Error returns an error if the underlying value is error object. If not,
- // this returns nil.
- func (v *Variable) Error() error {
- err, ok := v.value.(*Error)
- if ok {
- return errors.New(err.String())
- }
- return nil
- }
- // Object returns an underlying Object of the variable value. Note that
- // returned Object is a copy of an actual Object used in the script.
- func (v *Variable) Object() Object {
- return v.value
- }
- // IsUndefined returns true if the underlying value is undefined.
- func (v *Variable) IsUndefined() bool {
- return v.value == UndefinedValue
- }
|