package transform import ( "github.com/hashicorp/hcl/v2" ) // A Transformer takes a given body, applies some (possibly no-op) // transform to it, and returns the new body. // // It must _not_ mutate the given body in-place. // // The transform call cannot fail, but it _can_ return a body that immediately // returns diagnostics when its methods are called. NewErrorBody is a utility // to help with this. type Transformer interface { TransformBody(hcl.Body) hcl.Body } // TransformerFunc is a function type that implements Transformer. type TransformerFunc func(hcl.Body) hcl.Body // TransformBody is an implementation of Transformer.TransformBody. func (f TransformerFunc) TransformBody(in hcl.Body) hcl.Body { return f(in) } type chain []Transformer // Chain takes a slice of transformers and returns a single new // Transformer that applies each of the given transformers in sequence. func Chain(c []Transformer) Transformer { return chain(c) } func (c chain) TransformBody(body hcl.Body) hcl.Body { for _, t := range c { body = t.TransformBody(body) } return body }