in internal/azure/types/string_type.go [35:66]
func (s *StringType) Validate(body attr.Value, path string) []error {
if s == nil || body == nil || body.IsNull() || body.IsUnknown() {
return nil
}
var v string
switch input := body.(type) {
case types.String:
v = input.ValueString()
case types.Dynamic:
return s.Validate(input.UnderlyingValue(), path)
default:
return []error{utils.ErrorMismatch(path, "string", fmt.Sprintf("%T", body))}
}
if s.MinLength != nil && len(v) < *s.MinLength {
return []error{utils.ErrorCommon(path, fmt.Sprintf("string length is less than %d", *s.MinLength))}
}
if s.MaxLength != nil && len(v) > *s.MaxLength {
return []error{utils.ErrorCommon(path, fmt.Sprintf("string length is greater than %d", *s.MaxLength))}
}
if s.Pattern != "" {
isMatch, err := regexp.Match(s.Pattern, []byte(v))
if err != nil {
log.Printf("[WARN] failed to match pattern %s: %s", s.Pattern, err)
return nil
}
if !isMatch {
return []error{utils.ErrorCommon(path, fmt.Sprintf("string does not match pattern %s", s.Pattern))}
}
}
return nil
}