diff --git a/example/validation/validation.go b/example/validation/validation.go index 480275c..00122fa 100644 --- a/example/validation/validation.go +++ b/example/validation/validation.go @@ -12,6 +12,7 @@ type user struct { Name string `validate:"required" mod:"trim"` Age int `validate:"gt=10"` Magic string `mod:"magic"` + Skill string `mod:"skill=expert"` Country string `validate:"contain=konoha" mod:"lcase"` } @@ -20,9 +21,12 @@ func main() { v := validation.New(true) // Register custom modifier. - v.RegisterModifier("magic", func(in string) string { + v.RegisterModifier("magic", func(in string, _ ...string) string { return in + " magic" }) + v.RegisterModifier("skill", func(in string, param ...string) string { + return fmt.Sprintf("%s (%s)", in, param[0]) + }) // Register custom validator. v.RegisterValidator("contain", func(value interface{}, param ...string) bool { @@ -42,6 +46,7 @@ func main() { Name: " Naruto ", Age: 15, Magic: "ninja", + Skill: "jump", Country: "Konohagakure", } diff --git a/validation/playground/playground.go b/validation/playground/playground.go index ddee086..aa020d7 100644 --- a/validation/playground/playground.go +++ b/validation/playground/playground.go @@ -43,7 +43,7 @@ func New(autoMod bool) *Validator { } // RegisterModifier to register custom modifier. -func (v *Validator) RegisterModifier(name string, fn func(string) string) error { +func (v *Validator) RegisterModifier(name string, fn func(string, ...string) string) error { if name == "" { return ErrRequiredName } @@ -55,7 +55,7 @@ func (v *Validator) RegisterModifier(name string, fn func(string) string) error v.mod.Register(name, func(ctx context.Context, fl mold.FieldLevel) error { switch fl.Field().Kind() { case reflect.String: - fl.Field().SetString(fn(fl.Field().String())) + fl.Field().SetString(fn(fl.Field().String(), fl.Param())) } return nil }) diff --git a/validation/validation.go b/validation/validation.go index 4d33dcf..4eeb352 100644 --- a/validation/validation.go +++ b/validation/validation.go @@ -7,7 +7,7 @@ import "github.com/rl404/fairy/validation/playground" // See usage example in example folder. type Validator interface { // Register custom modifier. - RegisterModifier(name string, fn func(in string) (out string)) error + RegisterModifier(name string, fn func(in string, param ...string) (out string)) error // Modify struct field value according to modifier tag. // Param `data` should be a pointer. Modify(data interface{}) error