code: func parseEnumTypeDefinition(parser *Parser) (ast.Node, error) {
  	start := parser.Token.Start
  	description, err := parseDescription(parser)
  	if err != nil {
  		return nil, err
  	}
  	_, err = expectKeyWord(parser, lexer.ENUM)
  	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
  	}
  	iEnumValueDefs, err := reverse(parser,
  		lexer.BRACE_L, parseEnumValueDefinition, lexer.BRACE_R,
  		false,
  	)
  	if err != nil {
  		return nil, err
  	}
  	values := []*ast.EnumValueDefinition{}
  	for _, iEnumValueDef := range iEnumValueDefs {
  		if iEnumValueDef != nil {
  			values = append(values, iEnumValueDef.(*ast.EnumValueDefinition))
  		}
  	}
  	return ast.NewEnumDefinition(&ast.EnumDefinition{
  		Name:        name,
  		Description: description,
  		Directives:  directives,
  		Loc:         loc(parser, start),
  		Values:      values,
  	}), nil
  }
docs: /**
   * EnumTypeDefinition : Description? enum Name Directives? { EnumValueDefinition+ }
   */