25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

37 lines
914 B

  1. // Package validation uses github.com/go-playground/validator/v10 for API request validation.
  2. package validation
  3. import (
  4. "fmt"
  5. "github.com/go-playground/validator/v10"
  6. )
  7. var defaultValidator = validator.New()
  8. // Struct validates s and returns the first validation error as a readable message, or nil.
  9. func Struct(s any) error {
  10. err := defaultValidator.Struct(s)
  11. if err == nil {
  12. return nil
  13. }
  14. if errs, ok := err.(validator.ValidationErrors); ok && len(errs) > 0 {
  15. fe := errs[0]
  16. return fmt.Errorf("%s: %s", fe.Field(), fe.Tag())
  17. }
  18. return err
  19. }
  20. // Var validates a single value with the given tag (e.g. "required") and returns an error or nil.
  21. func Var(field any, tag string) error {
  22. err := defaultValidator.Var(field, tag)
  23. if err == nil {
  24. return nil
  25. }
  26. if errs, ok := err.(validator.ValidationErrors); ok && len(errs) > 0 {
  27. fe := errs[0]
  28. return fmt.Errorf("%s", fe.Tag())
  29. }
  30. return err
  31. }