aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/zclconf/go-cty/cty/convert/conversion_dynamic.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/zclconf/go-cty/cty/convert/conversion_dynamic.go')
-rw-r--r--vendor/github.com/zclconf/go-cty/cty/convert/conversion_dynamic.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/vendor/github.com/zclconf/go-cty/cty/convert/conversion_dynamic.go b/vendor/github.com/zclconf/go-cty/cty/convert/conversion_dynamic.go
new file mode 100644
index 0000000..4d19cf6
--- /dev/null
+++ b/vendor/github.com/zclconf/go-cty/cty/convert/conversion_dynamic.go
@@ -0,0 +1,33 @@
1package convert
2
3import (
4 "github.com/zclconf/go-cty/cty"
5)
6
7// dynamicFixup deals with just-in-time conversions of values that were
8// input-typed as cty.DynamicPseudoType during analysis, ensuring that
9// we end up with the desired output type once the value is known, or
10// failing with an error if that is not possible.
11//
12// This is in the spirit of the cty philosophy of optimistically assuming that
13// DynamicPseudoType values will become the intended value eventually, and
14// dealing with any inconsistencies during final evaluation.
15func dynamicFixup(wantType cty.Type) conversion {
16 return func(in cty.Value, path cty.Path) (cty.Value, error) {
17 ret, err := Convert(in, wantType)
18 if err != nil {
19 // Re-wrap this error so that the returned path is relative
20 // to the caller's original value, rather than relative to our
21 // conversion value here.
22 return cty.NilVal, path.NewError(err)
23 }
24 return ret, nil
25 }
26}
27
28// dynamicPassthrough is an identity conversion that is used when the
29// target type is DynamicPseudoType, indicating that the caller doesn't care
30// which type is returned.
31func dynamicPassthrough(in cty.Value, path cty.Path) (cty.Value, error) {
32 return in, nil
33}