@@ -134,7 +134,10 @@ func (r *Validator) ValidateWithValidation(jsonInput map[string]any, validations
134134 var ok bool
135135 var jsonValue any
136136 if jsonValue , ok = jsonInput [validation .Key ]; ! ok {
137- if strings .TrimSpace (validation .Requirement ) == string (model .NONE ) {
137+ if validation .Default != "" {
138+ jsonValue = validation .Default
139+ ok = true
140+ } else if strings .TrimSpace (validation .Requirement ) == string (model .NONE ) {
138141 continue
139142 } else if len (validation .Groups ) == 0 {
140143 return map [string ]any {}, fmt .Errorf ("json %v key not in map" , validation .Key )
@@ -189,13 +192,18 @@ func (r *Validator) ValidateWithValidation(jsonInput map[string]any, validations
189192 err = r .ValidateValueWithParser (jsonValue , & validation )
190193 }
191194
192- if err != nil && len (validation .Groups ) == 0 {
193- return map [string ]any {}, fmt .Errorf ("field %v invalid: %v" , validation .Key , err .Error ())
194- } else if err != nil {
195- for _ , group := range validation .Groups {
196- groupErrors [group .Name ] = append (groupErrors [group .Name ], fmt .Errorf ("field %v invalid: %v" , validation .Key , err .Error ()))
195+ if err != nil {
196+ if validation .Default != "" {
197+ jsonValue = validation .Default
198+ err = nil
199+ } else if len (validation .Groups ) == 0 {
200+ return map [string ]any {}, fmt .Errorf ("field %v invalid: %v" , validation .Key , err .Error ())
201+ } else {
202+ for _ , group := range validation .Groups {
203+ groupErrors [group .Name ] = append (groupErrors [group .Name ], fmt .Errorf ("field %v invalid: %v" , validation .Key , err .Error ()))
204+ }
205+ continue
197206 }
198- continue
199207 }
200208
201209 validateValues [validation .Key ] = jsonValue
@@ -214,13 +222,20 @@ func (r *Validator) ValidateWithValidation(jsonInput map[string]any, validations
214222//
215223// It returns an error if the validation fails.
216224func (r * Validator ) ValidateValueWithParser (input any , validation * model.Validation ) error {
217- p := parser .NewParser ()
218- v , err := p .ParseValidation (validation .Requirement )
219- if err != nil {
220- return err
225+ var astValue * model.AstValue
226+
227+ if validation .RequirementAST != nil {
228+ astValue = validation .RequirementAST
229+ } else {
230+ p := parser .NewParser ()
231+ v , err := p .ParseValidation (validation .Requirement )
232+ if err != nil {
233+ return err
234+ }
235+ astValue = v .RootValue
221236 }
222237
223- err = r .RunValidatorsOnConditionGroup (input , v . RootValue )
238+ err : = r .RunValidatorsOnConditionGroup (input , astValue )
224239 if err != nil {
225240 return err
226241 }
@@ -244,7 +259,7 @@ func (r *Validator) RunValidatorsOnConditionGroup(input any, astValue *model.Ast
244259 err = r .RunValidatorsOnConditionGroup (input , v )
245260 case model .CONDITION :
246261 switch v .ConditionType {
247- case model .NONE :
262+ case model .NONE , model . DEF :
248263 continue
249264 case model .EQUAL :
250265 err = validators .ValidateEqual (input , v )
0 commit comments