code: func parseUnionTypeDefinition(parser *Parser) (ast.Node, error) {
  	start := parser.Token.Start
  	description, err := parseDescription(parser)
  	if err != nil {
  		return nil, err
  	}
  	_, err = expectKeyWord(parser, lexer.UNION)
  	if err != nil {
  		return nil, err
  	}
  	name, err := parseName(parser)
  	if err != nil {
  		return nil, err
  	}
  	directives, err := parseDirectives(parser)
  	if err != nil {
  		return nil, err
  	}
  	_, err = expect(parser, lexer.EQUALS)
  	if err != nil {
  		return nil, err
  	}
  	types, err := parseUnionMembers(parser)
  	if err != nil {
  		return nil, err
  	}
  	return ast.NewUnionDefinition(&ast.UnionDefinition{
  		Name:        name,
  		Description: description,
  		Directives:  directives,
  		Loc:         loc(parser, start),
  		Types:       types,
  	}), nil
  }
docs: /**
   * UnionTypeDefinition : Description? union Name Directives? = UnionMembers
   */