func unmarshalPreflightBody()

in internal/services/preflight/preflight.go [134:175]


func unmarshalPreflightBody(input types.Dynamic, identityList types.List, out *map[string]interface{}) error {
	if input.IsNull() || input.IsUnknown() || input.IsUnderlyingValueUnknown() {
		return fmt.Errorf("input is null or unknown")
	}

	const unknownPlaceholder = "[length('foo')]"

	data, err := dynamic.ToJSONWithUnknownValueHandler(input, func(value attr.Value) ([]byte, error) {
		return json.Marshal(unknownPlaceholder)
	})

	if err != nil {
		return fmt.Errorf("marshaling failed: %v", err)
	}

	if err = json.Unmarshal(data, &out); err != nil {
		return fmt.Errorf(`unmarshaling failed: value: %s, err: %+v`, string(data), err)
	}

	if out == nil {
		out = &map[string]interface{}{}
	}
	// make sure that there's no unknown value outside the properties bag
	for k, v := range *out {
		if k == "properties" {
			continue
		}
		if searchForValue(v, unknownPlaceholder) {
			return fmt.Errorf("unknown value found outside the properties bag")
		}
	}

	if (*out)["identity"] == nil && !identityList.IsNull() && !identityList.IsUnknown() {
		identityModel := identity.FromList(identityList)
		expandedIdentity, err := identity.ExpandIdentity(identityModel)
		if err != nil {
			return err
		}
		(*out)["identity"] = expandedIdentity
	}
	return nil
}