package taskfile import ( "errors" "fmt" ) var ( // ErrCantUnmarshalPrecondition is returned for invalid precond YAML. ErrCantUnmarshalPrecondition = errors.New("task: Can't unmarshal precondition value") ) // Precondition represents a precondition necessary for a task to run type Precondition struct { Sh string Msg string } // UnmarshalYAML implements yaml.Unmarshaler interface. func (p *Precondition) UnmarshalYAML(unmarshal func(interface{}) error) error { var cmd string if err := unmarshal(&cmd); err == nil { p.Sh = cmd p.Msg = fmt.Sprintf("`%s` failed", cmd) return nil } var sh struct { Sh string Msg string } if err := unmarshal(&sh); err != nil { return err } p.Sh = sh.Sh p.Msg = sh.Msg if p.Msg == "" { p.Msg = fmt.Sprintf("%s failed", sh.Sh) } return nil }