in internal/retry/retryable_errors.go [173:326]
func NewRetryValue(attributeTypes map[string]attr.Type, attributes map[string]attr.Value) (RetryValue, diag.Diagnostics) {
var diags diag.Diagnostics
// Reference: https://github.com/hashicorp/terraform-plugin-framework/issues/521
ctx := context.Background()
for name, attributeType := range attributeTypes {
attribute, ok := attributes[name]
if !ok {
diags.AddError(
"Missing RetryValue Attribute Value",
"While creating a RetryValue value, a missing attribute value was detected. "+
"A RetryValue must contain values for all attributes, even if null or unknown. "+
"This is always an issue with the provider and should be reported to the provider developers.\n\n"+
fmt.Sprintf("RetryValue Attribute Name (%s) Expected Type: %s", name, attributeType.String()),
)
continue
}
if !attributeType.Equal(attribute.Type(ctx)) {
diags.AddError(
"Invalid RetryValue Attribute Type",
"While creating a RetryValue value, an invalid attribute value was detected. "+
"A RetryValue must use a matching attribute type for the value. "+
"This is always an issue with the provider and should be reported to the provider developers.\n\n"+
fmt.Sprintf("RetryValue Attribute Name (%s) Expected Type: %s\n", name, attributeType.String())+
fmt.Sprintf("RetryValue Attribute Name (%s) Given Type: %s", name, attribute.Type(ctx)),
)
}
}
for name := range attributes {
_, ok := attributeTypes[name]
if !ok {
diags.AddError(
"Extra RetryValue Attribute Value",
"While creating a RetryValue value, an extra attribute value was detected. "+
"A RetryValue must not contain values beyond the expected attribute types. "+
"This is always an issue with the provider and should be reported to the provider developers.\n\n"+
fmt.Sprintf("Extra RetryValue Attribute Name: %s", name),
)
}
}
if diags.HasError() {
return NewRetryValueUnknown(), diags
}
errorMessageRegexAttribute, ok := attributes["error_message_regex"]
if !ok {
diags.AddError(
"Attribute Missing",
`error_message_regex is missing from object`)
return NewRetryValueUnknown(), diags
}
errorMessageRegexVal, ok := errorMessageRegexAttribute.(basetypes.ListValue)
if !ok {
diags.AddError(
"Attribute Wrong Type",
fmt.Sprintf(`error_message_regex expected to be basetypes.ListValue, was: %T`, errorMessageRegexAttribute))
}
intervalSecondsAttribute, ok := attributes["interval_seconds"]
if !ok {
diags.AddError(
"Attribute Missing",
`interval_seconds is missing from object`)
return NewRetryValueUnknown(), diags
}
intervalSecondsVal, ok := intervalSecondsAttribute.(basetypes.Int64Value)
if !ok {
diags.AddError(
"Attribute Wrong Type",
fmt.Sprintf(`interval_seconds expected to be basetypes.Int64Value, was: %T`, intervalSecondsAttribute))
}
maxIntervalSecondsAttribute, ok := attributes["max_interval_seconds"]
if !ok {
diags.AddError(
"Attribute Missing",
`max_interval_seconds is missing from object`)
return NewRetryValueUnknown(), diags
}
maxIntervalSecondsVal, ok := maxIntervalSecondsAttribute.(basetypes.Int64Value)
if !ok {
diags.AddError(
"Attribute Wrong Type",
fmt.Sprintf(`max_interval_seconds expected to be basetypes.Int64Value, was: %T`, maxIntervalSecondsAttribute))
}
multiplierAttribute, ok := attributes["multiplier"]
if !ok {
diags.AddError(
"Attribute Missing",
`multiplier is missing from object`)
return NewRetryValueUnknown(), diags
}
multiplierVal, ok := multiplierAttribute.(basetypes.Float64Value)
if !ok {
diags.AddError(
"Attribute Wrong Type",
fmt.Sprintf(`multiplier expected to be basetypes.Float64Value, was: %T`, multiplierAttribute))
}
randomizationFactorAttribute, ok := attributes["randomization_factor"]
if !ok {
diags.AddError(
"Attribute Missing",
`randomization_factor is missing from object`)
return NewRetryValueUnknown(), diags
}
randomizationFactorVal, ok := randomizationFactorAttribute.(basetypes.Float64Value)
if !ok {
diags.AddError(
"Attribute Wrong Type",
fmt.Sprintf(`randomization_factor expected to be basetypes.Float64Value, was: %T`, randomizationFactorAttribute))
}
if diags.HasError() {
return NewRetryValueUnknown(), diags
}
return RetryValue{
ErrorMessageRegex: errorMessageRegexVal,
IntervalSeconds: intervalSecondsVal,
MaxIntervalSeconds: maxIntervalSecondsVal,
Multiplier: multiplierVal,
RandomizationFactor: randomizationFactorVal,
state: attr.ValueStateKnown,
}, diags
}