41 lines
1 KiB
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
|
|
}
|