github.com/profzone/eden-framework@v1.0.10/pkg/validate/validatetpl/slice.go (about) 1 package validatetpl 2 3 import ( 4 "fmt" 5 "reflect" 6 ) 7 8 func NewValidateSlice(min uint64, max uint64, elemValidateFunc func(v interface{}) (bool, string)) func(v interface{}) (bool, string) { 9 return func(v interface{}) (bool, string) { 10 if reflect.TypeOf(v).Kind() == reflect.Slice { 11 sliceValue := reflect.ValueOf(v) 12 elemCount := sliceValue.Len() 13 if uint64(elemCount) < min || (max > 0 && uint64(elemCount) > max) { 14 return false, fmt.Sprintf(SLICE_ELEM_NUM_NOT_IN_RANGE, min, max, elemCount) 15 } 16 if elemValidateFunc != nil { 17 for i := 0; i < elemCount; i++ { 18 elemValue := sliceValue.Index(i) 19 if ok, errMsg := elemValidateFunc(elemValue.Interface()); !ok { 20 return false, fmt.Sprintf(SLICE_ELEM_INVALID, errMsg) 21 } 22 } 23 } 24 return true, "" 25 } 26 return false, TYPE_NOT_SLICE 27 } 28 }