// Wrap the conversion in some standard checks that we don't want to
// have to repeat in every conversion function.
return func(in cty.Value, path cty.Path) (cty.Value, error) {
+ if out == cty.DynamicPseudoType {
+ // Conversion to DynamicPseudoType always just passes through verbatim.
+ return in, nil
+ }
if !in.IsKnown() {
return cty.UnknownVal(out), nil
}
}
return nil
+ case out.IsObjectType() && in.IsObjectType():
+ return conversionObjectToObject(in, out, unsafe)
+
+ case out.IsTupleType() && in.IsTupleType():
+ return conversionTupleToTuple(in, out, unsafe)
+
case out.IsListType() && (in.IsListType() || in.IsSetType()):
inEty := in.ElementType()
outEty := out.ElementType()
}
return conversionCollectionToSet(outEty, convEty)
+ case out.IsMapType() && in.IsMapType():
+ inEty := in.ElementType()
+ outEty := out.ElementType()
+ convEty := getConversion(inEty, outEty, unsafe)
+ if convEty == nil {
+ return nil
+ }
+ return conversionCollectionToMap(outEty, convEty)
+
case out.IsListType() && in.IsTupleType():
outEty := out.ElementType()
return conversionTupleToList(in, outEty, unsafe)
+ case out.IsSetType() && in.IsTupleType():
+ outEty := out.ElementType()
+ return conversionTupleToSet(in, outEty, unsafe)
+
case out.IsMapType() && in.IsObjectType():
outEty := out.ElementType()
return conversionObjectToMap(in, outEty, unsafe)