code: func (v *Validate) RegisterStructValidationCtx(fn StructLevelFuncCtx, types ...interface{}) {
  
  	if v.structLevelFuncs == nil {
  		v.structLevelFuncs = make(map[reflect.Type]StructLevelFuncCtx)
  	}
  
  	for _, t := range types {
  		tv := reflect.ValueOf(t)
  		if tv.Kind() == reflect.Ptr {
  			t = reflect.Indirect(tv).Interface()
  		}
  
  		v.structLevelFuncs[reflect.TypeOf(t)] = fn
  	}
  }
docs: // RegisterStructValidationCtx registers a StructLevelFuncCtx against a number of types and allows passing
  // of contextual validation information via context.Context.
  //
  // NOTE:
  // - this method is not thread-safe it is intended that these all be registered prior to any validation