code: func VisitUsingRules(schema *Schema, typeInfo *TypeInfo, astDoc *ast.Document, rules []ValidationRuleFn) []gqlerrors.FormattedError {
  
  	context := NewValidationContext(schema, astDoc, typeInfo)
  	visitors := []*visitor.VisitorOptions{}
  
  	for _, rule := range rules {
  		instance := rule(context)
  		visitors = append(visitors, instance.VisitorOpts)
  	}
  
  	// Visit the whole document with each instance of all provided rules.
  	visitor.Visit(astDoc, visitor.VisitWithTypeInfo(typeInfo, visitor.VisitInParallel(visitors...)), nil)
  	return context.Errors()
  }
docs: // VisitUsingRules This uses a specialized visitor which runs multiple visitors in parallel,
  // while maintaining the visitor skip and break API.
  //
  // @internal
  // Had to expose it to unit test experimental customizable validation feature,
  // but not meant for public consumption