package taskfile import ( "errors" "strings" ) var ( // ErrCantUnmarshalVar is returned for invalid var YAML. ErrCantUnmarshalVar = errors.New("task: can't unmarshal var value") ) // Vars is a string[string] variables map. type Vars map[string]Var // ToCacheMap converts Vars to a map containing only the static // variables func (vs Vars) ToCacheMap() (m map[string](interface{})) { m = make(map[string](interface{}), len(vs)) for k, v := range vs { if v.Sh != "" { // Dynamic variable is not yet resolved; trigger // to be used in templates. continue } if v.Live != nil { m[k] = v.Live } else { m[k] = v.Static } } return } // Var represents either a static or dynamic variable. type Var struct { Static string Live interface{} Sh string } // UnmarshalYAML implements yaml.Unmarshaler interface. func (v *Var) UnmarshalYAML(unmarshal func(interface{}) error) error { var str string if err := unmarshal(&str); err == nil { if strings.HasPrefix(str, "$") { v.Sh = strings.TrimPrefix(str, "$") } else { v.Static = str } return nil } var sh struct { Sh string } if err := unmarshal(&sh); err == nil { v.Sh = sh.Sh return nil } return ErrCantUnmarshalVar }