Files
terraform-provider-unifi/internal/provider/validators/string_length_exactly.go
2025-03-21 11:52:55 +01:00

58 lines
1.4 KiB
Go

package validators
import (
"context"
"fmt"
"github.com/filipowm/terraform-provider-unifi/internal/provider/types"
"github.com/hashicorp/terraform-plugin-framework-validators/helpers/validatordiag"
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
)
func StringLengthExactly(len int) validator.String {
return stringLengthExactlyValidator{len: len}
}
type stringLengthExactlyValidator struct {
len int
}
func (v stringLengthExactlyValidator) invalidUsageMessage() string {
return "length cannot be less than zero"
}
func (v stringLengthExactlyValidator) Description(_ context.Context) string {
return fmt.Sprintf("string length must be exactly %d", v.len)
}
func (v stringLengthExactlyValidator) MarkdownDescription(ctx context.Context) string {
return v.Description(ctx)
}
func (v stringLengthExactlyValidator) ValidateString(ctx context.Context, req validator.StringRequest, resp *validator.StringResponse) {
if v.len < 0 {
resp.Diagnostics.Append(
validatordiag.InvalidValidatorUsageDiagnostic(
req.Path,
"StringLengthExactly",
v.invalidUsageMessage(),
),
)
return
}
value := req.ConfigValue
if !types.IsDefined(value) {
return
}
val := value.ValueString()
if len(val) != v.len {
resp.Diagnostics.Append(
validatordiag.InvalidAttributeValueDiagnostic(
req.Path,
v.Description(ctx),
fmt.Sprintf("%s (length: %d)", val, len(val)),
),
)
}
}