func attrValueToJSON()

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