| package convert |
| |
| import ( |
| "github.com/zclconf/go-cty/cty" |
| ) |
| |
| // dynamicFixup deals with just-in-time conversions of values that were |
| // input-typed as cty.DynamicPseudoType during analysis, ensuring that |
| // we end up with the desired output type once the value is known, or |
| // failing with an error if that is not possible. |
| // |
| // This is in the spirit of the cty philosophy of optimistically assuming that |
| // DynamicPseudoType values will become the intended value eventually, and |
| // dealing with any inconsistencies during final evaluation. |
| func dynamicFixup(wantType cty.Type) conversion { |
| return func(in cty.Value, path cty.Path) (cty.Value, error) { |
| ret, err := Convert(in, wantType) |
| if err != nil { |
| // Re-wrap this error so that the returned path is relative |
| // to the caller's original value, rather than relative to our |
| // conversion value here. |
| return cty.NilVal, path.NewError(err) |
| } |
| return ret, nil |
| } |
| } |
| |
| // dynamicPassthrough is an identity conversion that is used when the |
| // target type is DynamicPseudoType, indicating that the caller doesn't care |
| // which type is returned. |
| func dynamicPassthrough(in cty.Value, path cty.Path) (cty.Value, error) { |
| return in, nil |
| } |