axiom/forms/validators.go

41 lines
1 KiB
Go

package forms
import (
"fmt"
"reflect"
"strconv"
"strings"
)
func nonzero(field string, value any, _ string) error {
v := reflect.ValueOf(value)
if v.Kind() == reflect.String && v.Len() == 0 {
return fmt.Errorf("field '%s' must not be empty", field)
}
if v.Kind() == reflect.Slice && v.Len() == 0 {
return fmt.Errorf("field '%s' must not be empty", field)
}
if v.Kind() >= reflect.Int && v.Kind() <= reflect.Float64 && v.IsZero() {
return fmt.Errorf("field '%s' must be non-zero", field)
}
return nil
}
func minlen(field string, value any, param string) error {
min, err := strconv.Atoi(param)
if err != nil {
return fmt.Errorf("invalid minlen param for field '%s'", field)
}
if str, ok := value.(string); ok && len(str) < min {
return fmt.Errorf("field '%s' must be at least %d characters", field, min)
}
return nil
}
func email(field string, value any, _ string) error {
str, ok := value.(string)
if !ok || !strings.Contains(str, "@") {
return fmt.Errorf("field '%s' must be a valid email address", field)
}
return nil
}