@@ -203,8 +203,10 @@ func reifyMap(opts *options, to reflect.Value, from *Config, validators []valida
203203
204204fields := from .fields .dict ()
205205if len (fields ) == 0 {
206- if err := tryRecursiveValidate (to , opts , validators ); err != nil {
207- return raiseValidation (from .ctx , from .metadata , "" , err )
206+ if ! opts .noValidate {
207+ if err := tryRecursiveValidate (to , opts , validators ); err != nil {
208+ return raiseValidation (from .ctx , from .metadata , "" , err )
209+ }
208210}
209211return nil
210212}
@@ -231,11 +233,13 @@ func reifyMap(opts *options, to reflect.Value, from *Config, validators []valida
231233}
232234}
233235
234- if err := runValidators (to .Interface (), validators ); err != nil {
235- return raiseValidation (from .ctx , from .metadata , "" , err )
236- }
237- if err := tryValidate (to ); err != nil {
238- return raiseValidation (from .ctx , from .metadata , "" , err )
236+ if ! opts .noValidate {
237+ if err := runValidators (to .Interface (), validators ); err != nil {
238+ return raiseValidation (from .ctx , from .metadata , "" , err )
239+ }
240+ if err := tryValidate (to ); err != nil {
241+ return raiseValidation (from .ctx , from .metadata , "" , err )
242+ }
239243}
240244
241245return nil
@@ -296,8 +300,10 @@ func reifyStruct(opts *options, orig reflect.Value, cfg *Config) Error {
296300}
297301}
298302
299- if err := tryValidate (to ); err != nil {
300- return raiseValidation (cfg .ctx , cfg .metadata , "" , err )
303+ if ! opts .noValidate {
304+ if err := tryValidate (to ); err != nil {
305+ return raiseValidation (cfg .ctx , cfg .metadata , "" , err )
306+ }
301307}
302308
303309orig .Set (pointerize (orig .Type (), to .Type (), to ))
@@ -324,16 +330,20 @@ func reifyGetField(
324330// When fieldType is a pointer and the value is nil, return nil as the
325331// underlying type should not be allocated.
326332if fieldType .Kind () == reflect .Ptr {
327- if err := tryRecursiveValidate (to , opts .opts , opts .validators ); err != nil {
328- return raiseValidation (cfg .ctx , cfg .metadata , name , err )
333+ if ! opts .opts .noValidate {
334+ if err := tryRecursiveValidate (to , opts .opts , opts .validators ); err != nil {
335+ return raiseValidation (cfg .ctx , cfg .metadata , name , err )
336+ }
329337}
330338return nil
331339}
332340
333341// Primitive types return early when it doesn't implement the Initializer interface.
334342if fieldType .Kind () != reflect .Struct && ! hasInitDefaults (fieldType ) {
335- if err := tryRecursiveValidate (to , opts .opts , opts .validators ); err != nil {
336- return raiseValidation (cfg .ctx , cfg .metadata , name , err )
343+ if ! opts .opts .noValidate {
344+ if err := tryRecursiveValidate (to , opts .opts , opts .validators ); err != nil {
345+ return raiseValidation (cfg .ctx , cfg .metadata , name , err )
346+ }
337347}
338348return nil
339349}
@@ -604,21 +614,23 @@ func reifyDoArray(
604614if v .IsValid () {
605615to .Index (idx ).Set (v )
606616}
607- } else {
617+ } else if ! opts . opts . noValidate {
608618if err := tryRecursiveValidate (to .Index (idx ), opts .opts , nil ); err != nil {
609619return reflect.Value {}, raiseValidation (val .Context (), val .meta (), "" , err )
610620}
611621}
612622}
613623
614- if err := runValidators (to .Interface (), opts .validators ); err != nil {
615- ctx := val .Context ()
616- return reflect.Value {}, raiseValidation (ctx , val .meta (), "" , err )
617- }
624+ if ! opts .opts .noValidate {
625+ if err := runValidators (to .Interface (), opts .validators ); err != nil {
626+ ctx := val .Context ()
627+ return reflect.Value {}, raiseValidation (ctx , val .meta (), "" , err )
628+ }
618629
619- if err := tryValidate (to ); err != nil {
620- ctx := val .Context ()
621- return reflect.Value {}, raiseValidation (ctx , val .meta (), "" , err )
630+ if err := tryValidate (to ); err != nil {
631+ ctx := val .Context ()
632+ return reflect.Value {}, raiseValidation (ctx , val .meta (), "" , err )
633+ }
622634}
623635
624636return to , nil
@@ -679,12 +691,14 @@ func reifyPrimitive(
679691}
680692}
681693
682- if err := runValidators (v .Interface (), opts .validators ); err != nil {
683- return reflect.Value {}, raiseValidation (val .Context (), val .meta (), "" , err )
684- }
694+ if ! opts .opts .noValidate {
695+ if err := runValidators (v .Interface (), opts .validators ); err != nil {
696+ return reflect.Value {}, raiseValidation (val .Context (), val .meta (), "" , err )
697+ }
685698
686- if err := tryValidate (v ); err != nil {
687- return reflect.Value {}, raiseValidation (val .Context (), val .meta (), "" , err )
699+ if err := tryValidate (v ); err != nil {
700+ return reflect.Value {}, raiseValidation (val .Context (), val .meta (), "" , err )
701+ }
688702}
689703
690704return pointerize (t , baseType , chaseValuePointers (v )), nil
0 commit comments