in internal/services/dynamic/dynamic.go [48:102]
func attrValueToJSON(val attr.Value, handler UnknownValueHandler) ([]byte, error) {
if val == nil || val.IsNull() {
return json.Marshal(nil)
}
if val.IsUnknown() {
if handler != nil {
return handler(val)
}
}
switch value := val.(type) {
case types.Bool:
return json.Marshal(value.ValueBool())
case types.String:
return json.Marshal(value.ValueString())
case types.Int64:
return json.Marshal(value.ValueInt64())
case types.Float64:
return json.Marshal(value.ValueFloat64())
case types.Number:
v, _ := value.ValueBigFloat().Float64()
return json.Marshal(v)
case types.List:
l, err := attrListToJSON(value.Elements(), handler)
if err != nil {
return nil, err
}
return json.Marshal(l)
case types.Set:
l, err := attrListToJSON(value.Elements(), handler)
if err != nil {
return nil, err
}
return json.Marshal(l)
case types.Tuple:
l, err := attrListToJSON(value.Elements(), handler)
if err != nil {
return nil, err
}
return json.Marshal(l)
case types.Map:
m, err := attrMapToJSON(value.Elements(), handler)
if err != nil {
return nil, err
}
return json.Marshal(m)
case types.Object:
m, err := attrMapToJSON(value.Attributes(), handler)
if err != nil {
return nil, err
}
return json.Marshal(m)
default:
return nil, fmt.Errorf("Unhandled type: %T", value)
}
}