]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/hashicorp/terraform/terraform/eval_sequence.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / terraform / terraform / eval_sequence.go
1 package terraform
2
3 import (
4 "github.com/hashicorp/terraform/tfdiags"
5 )
6
7 // EvalSequence is an EvalNode that evaluates in sequence.
8 type EvalSequence struct {
9 Nodes []EvalNode
10 }
11
12 func (n *EvalSequence) Eval(ctx EvalContext) (interface{}, error) {
13 var diags tfdiags.Diagnostics
14
15 for _, n := range n.Nodes {
16 if n == nil {
17 continue
18 }
19
20 if _, err := EvalRaw(n, ctx); err != nil {
21 if _, isEarlyExit := err.(EvalEarlyExitError); isEarlyExit {
22 // In this path we abort early, losing any non-error
23 // diagnostics we saw earlier.
24 return nil, err
25 }
26 diags = diags.Append(err)
27 if diags.HasErrors() {
28 // Halt if we get some errors, but warnings are okay.
29 break
30 }
31 }
32 }
33
34 return nil, diags.ErrWithWarnings()
35 }
36
37 // EvalNodeFilterable impl.
38 func (n *EvalSequence) Filter(fn EvalNodeFilterFunc) {
39 for i, node := range n.Nodes {
40 n.Nodes[i] = fn(node)
41 }
42 }