MCPcopy
hub / github.com/go-task/task / UnmarshalYAML

Method UnmarshalYAML

taskfile/ast/var.go:19–67  ·  view source on GitHub ↗
(node *yaml.Node)

Source from the content-addressed store, hash-verified

17}
18
19func (v *Var) UnmarshalYAML(node *yaml.Node) error {
20 switch node.Kind {
21 case yaml.MappingNode:
22 var m struct {
23 Sh *string
24 Ref string
25 Map any
26 Value any
27 Secret bool
28 }
29 if err := node.Decode(&m); err != nil {
30 return errors.NewTaskfileDecodeError(err, node)
31 }
32 // Validate the keys regardless of their order: every key must be known
33 // and at least one type-defining key must be present. "secret" is a
34 // modifier, not a type, so it can appear in any position.
35 hasType := false
36 for i := 0; i+1 < len(node.Content); i += 2 {
37 switch node.Content[i].Value {
38 case "sh", "ref", "map", "value":
39 hasType = true
40 case "secret":
41 // modifier, not a type
42 default:
43 return errors.NewTaskfileDecodeError(nil, node).WithMessage(`%q is not a valid variable type. Try "sh", "ref", "map", "value" or using a scalar value`, node.Content[i].Value)
44 }
45 }
46 if !hasType {
47 return errors.NewTaskfileDecodeError(nil, node).WithMessage(`a variable must define one of "sh", "ref", "map", "value" or be a scalar value`)
48 }
49 v.Sh = m.Sh
50 v.Ref = m.Ref
51 v.Secret = m.Secret
52 // Handle both "map" and "value" keys
53 if m.Map != nil {
54 v.Value = m.Map
55 } else if m.Value != nil {
56 v.Value = m.Value
57 }
58 return nil
59 default:
60 var value any
61 if err := node.Decode(&value); err != nil {
62 return errors.NewTaskfileDecodeError(err, node)
63 }
64 v.Value = value
65 return nil
66 }
67}

Callers

nothing calls this directly

Calls 2

NewTaskfileDecodeErrorFunction · 0.92
WithMessageMethod · 0.80

Tested by

no test coverage detected