code: func ValidateDocument(schema *Schema, astDoc *ast.Document, rules []ValidationRuleFn) (vr ValidationResult) {
  	if len(rules) == 0 {
  		rules = SpecifiedRules
  	}
  
  	if schema == nil {
  		vr.Errors = append(vr.Errors, gqlerrors.NewFormattedError("Must provide schema"))
  		return vr
  	}
  	if astDoc == nil {
  		vr.Errors = append(vr.Errors, gqlerrors.NewFormattedError("Must provide document"))
  		return vr
  	}
  
  	typeInfo := NewTypeInfo(&TypeInfoConfig{
  		Schema: schema,
  	})
  	vr.Errors = VisitUsingRules(schema, typeInfo, astDoc, rules)
  	if len(vr.Errors) == 0 {
  		vr.IsValid = true
  	}
  	return vr
  }
docs: /**
   * Implements the "Validation" section of the spec.
   *
   * Validation runs synchronously, returning an array of encountered errors, or
   * an empty array if no errors were encountered and the document is valid.
   *
   * A list of specific validation rules may be provided. If not provided, the
   * default list of rules defined by the GraphQL specification will be used.
   *
   * Each validation rules is a function which returns a visitor
   * (see the language/visitor API). Visitor methods are expected to return
   * GraphQLErrors, or Arrays of GraphQLErrors when invalid.
   */