github.com/paybyphone/terraform@v0.9.5-0.20170613192930-9706042ddd51/terraform/eval_filter.go (about)

     1  package terraform
     2  
     3  // EvalNodeFilterFunc is the callback used to replace a node with
     4  // another to node. To not do the replacement, just return the input node.
     5  type EvalNodeFilterFunc func(EvalNode) EvalNode
     6  
     7  // EvalNodeFilterable is an interface that can be implemented by
     8  // EvalNodes to allow filtering of sub-elements. Note that this isn't
     9  // a common thing to implement and you probably don't need it.
    10  type EvalNodeFilterable interface {
    11  	EvalNode
    12  	Filter(EvalNodeFilterFunc)
    13  }
    14  
    15  // EvalFilter runs the filter on the given node and returns the
    16  // final filtered value. This should be called rather than checking
    17  // the EvalNode directly since this will properly handle EvalNodeFilterables.
    18  func EvalFilter(node EvalNode, fn EvalNodeFilterFunc) EvalNode {
    19  	if f, ok := node.(EvalNodeFilterable); ok {
    20  		f.Filter(fn)
    21  		return node
    22  	}
    23  
    24  	return fn(node)
    25  }