@@ -8,13 +8,21 @@ import (
88)
99
1010var validators = map [string ]interface {}{
11- "required" : validateRequired ,
12- "minlength" : validateMinLength ,
13- "uuid" : validationIsUUID ,
14- "email" : validateIsEmail ,
15- "numeric" : validateIsNumber ,
16- "between" : validationBetween ,
17- "minmax" : validationMinMaxNumber ,
11+ "required" : validateRequired ,
12+ "minlength" : validateMinLength ,
13+ "uuid" : validationIsUUID ,
14+ "ulid" : validationIsULID ,
15+ "bic" : validationIsBIC ,
16+ "ethaddress" : validationIsEthereumAddress ,
17+ "btcaddress" : validationIsBtcAddress ,
18+ "mongoID" : validationIsMongoID ,
19+ "email" : validateIsEmail ,
20+ "numeric" : validateIsNumber ,
21+ "boolean" : validateIsBoolean ,
22+ "contains" : validationIsContains ,
23+ "notcontains" : validationIsNotContains ,
24+ "between" : validationBetween ,
25+ "minmax" : validationMinMaxNumber ,
1826}
1927
2028var data = map [string ]map [string ]string {
@@ -39,6 +47,12 @@ var data = map[string]map[string]string{
3947 "minmax" : {
4048 "error_msg" : "%s must be between %d and %d." ,
4149 },
50+ "contains" : {
51+ "error_msg" : "%s must contain." ,
52+ },
53+ "notcontains" : {
54+ "error_msg" : "%s must not contain." ,
55+ },
4256}
4357
4458func ValidateStruct (s interface {}) error {
@@ -73,6 +87,11 @@ func ValidateStruct(s interface{}) error {
7387 } else {
7488 return fmt .Errorf ("invalid parameter for tag %s" , tagName )
7589 }
90+ case func (string , string , string ) error :
91+ errorMsg := getMessage (tagName , fieldName )
92+ if err := validator (fmt .Sprint (value ), tagParam , errorMsg ); err != nil {
93+ return err
94+ }
7695 case func (string , int , int , string ) error :
7796 params := strings .Split (tagParam , "-" )
7897 if len (params ) != 2 {
@@ -101,6 +120,14 @@ func ValidateStruct(s interface{}) error {
101120 return nil
102121}
103122
123+ func AddCustomValidator (tagName , message string , fn interface {}) {
124+ validators [tagName ] = fn
125+ data [tagName ] = map [string ]string {
126+ "error_msg" : message ,
127+ }
128+ fmt .Println (data )
129+ }
130+
104131func getMessage (tagName , fieldName string , args ... interface {}) string {
105132 errorMsgTemplate := data [tagName ]["error_msg" ]
106133 return fmt .Sprintf (errorMsgTemplate , append ([]interface {}{fieldName }, args ... )... )
0 commit comments