Skip to content

Commit

Permalink
upgrade ValidStruct to support slice interface
Browse files Browse the repository at this point in the history
  • Loading branch information
xurwxj committed May 11, 2021
1 parent 8991da1 commit 5791b61
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 25 deletions.
20 changes: 19 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,30 @@ package main
import (
"fmt"

"github.com/go-playground/validator/v10"
"github.com/xurwxj/gtils/base"
"github.com/xurwxj/gtils/net"
"github.com/xurwxj/gtils/validators"
)

func main() {
td()
vs()
}

func vs() {
v := validator.New()
d := []factoryMemberForm{
{FactoryID: "888", Username: "999", IsAdmin: false},
{FactoryID: "rrr", Username: "ttt", IsAdmin: true},
}
fmt.Println(validators.ValidStruct(v, d))
fmt.Println("s: ", validators.ValidStruct(v, d[0]))
}

type factoryMemberForm struct {
FactoryID string `form:"factoryID" json:"factoryID" validate:"required"`
Username string `form:"username" json:"username" validate:"required"`
IsAdmin bool `form:"isAdmin" json:"isAdmin"`
}

func td() {
Expand Down
61 changes: 37 additions & 24 deletions validators/plugins.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,34 +11,47 @@ import (
)

// ValidStruct return json string error
func ValidStruct(Validate *validator.Validate, u interface{}) string {
err := Validate.Struct(u)
if err != nil {
rs := make(map[string]string)
su := structs.New(u)
for _, verr := range err.(validator.ValidationErrors) {
// tParam := verr.Param()
// fmt.Println("verr.Field(): ", verr.Field())
ff, ok := su.FieldOk(verr.Field())
if ok {
// fmt.Println("su.Field(verr.Field()): ", ff)
// fmt.Println("su.Field(verr.Field()).Tag(\"json\"): ", ff.Tag("json"))
rs[ff.Tag("json")] = verr.Tag()
} else {
// fmt.Println("verr StructField: ", verr.StructField())
// fmt.Println("verr.Tag(): ", verr.Tag())
rs[verr.Field()] = verr.Tag()
}
func ValidStruct(Validate *validator.Validate, tu interface{}) string {
targets := []interface{}{}
s := reflect.ValueOf(tu)
if s.Kind() == reflect.Slice || s.Kind() == reflect.Array {
for i := 0; i < s.Len(); i++ {
targets = append(targets, s.Index(i).Interface())
}
if len(rs) > 0 {
rsByte, err := json.Marshal(rs)
if err == nil {
return string(rsByte)
} else {
return "unknownErr"
} else {
targets = append(targets, tu)
}
// fmt.Println(targets)

rs := make(map[string]string)
for _, u := range targets {
err := Validate.Struct(u)
if err != nil {
su := structs.New(u)
for _, verr := range err.(validator.ValidationErrors) {
// tParam := verr.Param()
// fmt.Println("verr.Field(): ", verr.Field())
ff, ok := su.FieldOk(verr.Field())
if ok {
// fmt.Println("su.Field(verr.Field()): ", ff)
// fmt.Println("su.Field(verr.Field()).Tag(\"json\"): ", ff.Tag("json"))
rs[ff.Tag("json")] = verr.Tag()
} else {
// fmt.Println("verr StructField: ", verr.StructField())
// fmt.Println("verr.Tag(): ", verr.Tag())
rs[verr.Field()] = verr.Tag()
}
}
}
}
if len(rs) > 0 {
rsByte, err := json.Marshal(rs)
if err == nil {
return string(rsByte)
} else {
return "unknownErr"
}
}
return ""
}

Expand Down

0 comments on commit 5791b61

Please sign in to comment.