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} 34