// Code generated; DO NOT EDIT.

use num_derive::FromPrimitive;

#[derive(Clone, Debug, PartialEq, Eq, FromPrimitive)]
pub(crate) enum Rust {
    End = 0,
    Identifier = 1,
    SEMI = 2,
    MacroRulesBANG = 3,
    LPAREN = 4,
    RPAREN = 5,
    LBRACK = 6,
    RBRACK = 7,
    LBRACE = 8,
    RBRACE = 9,
    EQGT = 10,
    COLON = 11,
    DOLLAR = 12,
    TokenRepetitionPatternToken1 = 13,
    PLUS = 14,
    STAR = 15,
    QMARK = 16,
    Block2 = 17,
    Expr = 18,
    Expr2021 = 19,
    Ident = 20,
    Item = 21,
    Lifetime2 = 22,
    Literal = 23,
    Meta = 24,
    Pat = 25,
    PatParam = 26,
    Path = 27,
    Stmt = 28,
    Tt = 29,
    Ty = 30,
    Vis = 31,
    PrimitiveType = 32,
    PrimitiveType2 = 33,
    PrimitiveType3 = 34,
    PrimitiveType4 = 35,
    PrimitiveType5 = 36,
    PrimitiveType6 = 37,
    PrimitiveType7 = 38,
    PrimitiveType8 = 39,
    PrimitiveType9 = 40,
    PrimitiveType10 = 41,
    PrimitiveType11 = 42,
    PrimitiveType12 = 43,
    PrimitiveType13 = 44,
    PrimitiveType14 = 45,
    PrimitiveType15 = 46,
    PrimitiveType16 = 47,
    PrimitiveType17 = 48,
    DASH = 49,
    SLASH = 50,
    PERCENT = 51,
    CARET = 52,
    BANG = 53,
    AMP = 54,
    PIPE = 55,
    AMPAMP = 56,
    PIPEPIPE = 57,
    LTLT = 58,
    GTGT = 59,
    PLUSEQ = 60,
    DASHEQ = 61,
    STAREQ = 62,
    SLASHEQ = 63,
    PERCENTEQ = 64,
    CARETEQ = 65,
    AMPEQ = 66,
    PIPEEQ = 67,
    LTLTEQ = 68,
    GTGTEQ = 69,
    EQ = 70,
    EQEQ = 71,
    BANGEQ = 72,
    GT = 73,
    LT = 74,
    GTEQ = 75,
    LTEQ = 76,
    AT = 77,
    UNDERSCORE = 78,
    DOT = 79,
    DOTDOT = 80,
    DOTDOTDOT = 81,
    DOTDOTEQ = 82,
    COMMA = 83,
    COLONCOLON = 84,
    DASHGT = 85,
    HASH = 86,
    SQUOTE = 87,
    As = 88,
    Async = 89,
    Await = 90,
    Break = 91,
    Const = 92,
    Continue = 93,
    Default = 94,
    Enum = 95,
    Fn = 96,
    For = 97,
    Gen = 98,
    If = 99,
    Impl = 100,
    Let = 101,
    Loop = 102,
    Match = 103,
    Mod = 104,
    Pub = 105,
    Return = 106,
    Static = 107,
    Struct = 108,
    Trait = 109,
    Type = 110,
    Union = 111,
    Unsafe = 112,
    Use = 113,
    Where = 114,
    While = 115,
    Extern = 116,
    Ref = 117,
    Else = 118,
    In = 119,
    LT2 = 120,
    Dyn = 121,
    MutableSpecifier = 122,
    Raw = 123,
    Yield = 124,
    Move = 125,
    Try = 126,
    IntegerLiteral = 127,
    DQUOTE = 128,
    DQUOTE2 = 129,
    CharLiteral = 130,
    EscapeSequence = 131,
    True = 132,
    False = 133,
    SLASHSLASH = 134,
    LineCommentToken1 = 135,
    LineCommentToken2 = 136,
    LineCommentToken3 = 137,
    BANG2 = 138,
    SLASH2 = 139,
    SLASHSTAR = 140,
    STARSLASH = 141,
    Shebang = 142,
    Zelf = 143,
    Super = 144,
    Crate = 145,
    Metavariable = 146,
    StringContent = 147,
    RawStringLiteralStart = 148,
    StringContent2 = 149,
    RawStringLiteralEnd = 150,
    FloatLiteral = 151,
    OuterDocCommentMarker = 152,
    InnerDocCommentMarker = 153,
    BlockCommentContent = 154,
    DocComment = 155,
    ErrorSentinel = 156,
    SourceFile = 157,
    Statement = 158,
    EmptyStatement = 159,
    ExpressionStatement = 160,
    MacroDefinition = 161,
    MacroRule = 162,
    TokenPattern = 163,
    TokenTreePattern = 164,
    TokenBindingPattern = 165,
    TokenRepetitionPattern = 166,
    FragmentSpecifier = 167,
    TokenTree = 168,
    TokenRepetition = 169,
    AttributeItem = 170,
    InnerAttributeItem = 171,
    Attribute = 172,
    ModItem = 173,
    ForeignModItem = 174,
    DeclarationList = 175,
    StructItem = 176,
    UnionItem = 177,
    EnumItem = 178,
    EnumVariantList = 179,
    EnumVariant = 180,
    FieldDeclarationList = 181,
    FieldDeclaration = 182,
    OrderedFieldDeclarationList = 183,
    ExternCrateDeclaration = 184,
    ConstItem = 185,
    StaticItem = 186,
    TypeItem = 187,
    FunctionItem = 188,
    FunctionSignatureItem = 189,
    FunctionModifiers = 190,
    WhereClause = 191,
    WherePredicate = 192,
    ImplItem = 193,
    TraitItem = 194,
    AssociatedType = 195,
    TraitBounds = 196,
    HigherRankedTraitBound = 197,
    RemovedTraitBound = 198,
    TypeParameters = 199,
    ConstParameter = 200,
    TypeParameter = 201,
    LifetimeParameter = 202,
    LetDeclaration = 203,
    UseDeclaration = 204,
    UseClause = 205,
    ScopedUseList = 206,
    UseList = 207,
    UseAsClause = 208,
    UseWildcard = 209,
    Parameters = 210,
    SelfParameter = 211,
    VariadicParameter = 212,
    Parameter = 213,
    ExternModifier = 214,
    VisibilityModifier = 215,
    Type2 = 216,
    BracketedType = 217,
    QualifiedType = 218,
    Lifetime = 219,
    ArrayType = 220,
    ForLifetimes = 221,
    FunctionType = 222,
    TupleType = 223,
    UnitType = 224,
    GenericFunction = 225,
    GenericType = 226,
    GenericTypeWithTurbofish = 227,
    BoundedType = 228,
    UseBounds = 229,
    TypeArguments = 230,
    TypeBinding = 231,
    ReferenceType = 232,
    PointerType = 233,
    NeverType = 234,
    AbstractType = 235,
    DynamicType = 236,
    ExpressionExceptRange = 237,
    Expression = 238,
    MacroInvocation = 239,
    TokenTree2 = 240,
    DelimTokens = 241,
    NonDelimToken = 242,
    ScopedIdentifier = 243,
    ScopedTypeIdentifier = 244,
    ScopedTypeIdentifier2 = 245,
    RangeExpression = 246,
    UnaryExpression = 247,
    TryExpression = 248,
    ReferenceExpression = 249,
    BinaryExpression = 250,
    AssignmentExpression = 251,
    CompoundAssignmentExpr = 252,
    TypeCastExpression = 253,
    ReturnExpression = 254,
    YieldExpression = 255,
    CallExpression = 256,
    Arguments = 257,
    ArrayExpression = 258,
    ParenthesizedExpression = 259,
    TupleExpression = 260,
    UnitExpression = 261,
    StructExpression = 262,
    FieldInitializerList = 263,
    ShorthandFieldInitializer = 264,
    FieldInitializer = 265,
    BaseFieldInitializer = 266,
    IfExpression = 267,
    LetCondition = 268,
    LetChain2 = 269,
    Condition = 270,
    ElseClause = 271,
    MatchExpression = 272,
    MatchBlock = 273,
    MatchArm = 274,
    MatchArm2 = 275,
    MatchPattern = 276,
    WhileExpression = 277,
    LoopExpression = 278,
    ForExpression = 279,
    ConstBlock = 280,
    ClosureExpression = 281,
    ClosureParameters = 282,
    Label = 283,
    BreakExpression = 284,
    ContinueExpression = 285,
    IndexExpression = 286,
    AwaitExpression = 287,
    FieldExpression = 288,
    UnsafeBlock = 289,
    AsyncBlock = 290,
    GenBlock = 291,
    TryBlock = 292,
    Block = 293,
    Pattern = 294,
    GenericPattern = 295,
    TuplePattern = 296,
    SlicePattern = 297,
    TupleStructPattern = 298,
    StructPattern = 299,
    FieldPattern = 300,
    RemainingFieldPattern = 301,
    MutPattern = 302,
    RangePattern = 303,
    RefPattern = 304,
    CapturedPattern = 305,
    ReferencePattern = 306,
    OrPattern = 307,
    Literal2 = 308,
    LiteralPattern = 309,
    NegativeLiteral = 310,
    StringLiteral = 311,
    RawStringLiteral = 312,
    BooleanLiteral = 313,
    LineComment = 314,
    LineDocCommentMarker = 315,
    InnerDocCommentMarker2 = 316,
    OuterDocCommentMarker2 = 317,
    BlockComment = 318,
    BlockDocCommentMarker = 319,
    SourceFileRepeat1 = 320,
    MacroDefinitionRepeat1 = 321,
    TokenTreePatternRepeat1 = 322,
    TokenTreeRepeat1 = 323,
    NonSpecialTokenRepeat1 = 324,
    DeclarationListRepeat1 = 325,
    EnumVariantListRepeat1 = 326,
    EnumVariantListRepeat2 = 327,
    FieldDeclarationListRepeat1 = 328,
    OrderedFieldDeclarationListRepeat1 = 329,
    FunctionModifiersRepeat1 = 330,
    WhereClauseRepeat1 = 331,
    TraitBoundsRepeat1 = 332,
    TypeParametersRepeat1 = 333,
    UseListRepeat1 = 334,
    ParametersRepeat1 = 335,
    ForLifetimesRepeat1 = 336,
    TupleTypeRepeat1 = 337,
    UseBoundsRepeat1 = 338,
    TypeArgumentsRepeat1 = 339,
    DelimTokenTreeRepeat1 = 340,
    ArgumentsRepeat1 = 341,
    TupleExpressionRepeat1 = 342,
    FieldInitializerListRepeat1 = 343,
    MatchBlockRepeat1 = 344,
    MatchArmRepeat1 = 345,
    ClosureParametersRepeat1 = 346,
    TuplePatternRepeat1 = 347,
    SlicePatternRepeat1 = 348,
    StructPatternRepeat1 = 349,
    StringLiteralRepeat1 = 350,
    FieldIdentifier = 351,
    LetChain = 352,
    ShorthandFieldIdentifier = 353,
    TypeIdentifier = 354,
    Error = 355,
}

impl From<Rust> for &'static str {
    #[inline(always)]
    fn from(tok: Rust) -> Self {
        match tok {
            Rust::End => "end",
            Rust::Identifier => "identifier",
            Rust::SEMI => ";",
            Rust::MacroRulesBANG => "macro_rules!",
            Rust::LPAREN => "(",
            Rust::RPAREN => ")",
            Rust::LBRACK => "[",
            Rust::RBRACK => "]",
            Rust::LBRACE => "{",
            Rust::RBRACE => "}",
            Rust::EQGT => "=>",
            Rust::COLON => ":",
            Rust::DOLLAR => "$",
            Rust::TokenRepetitionPatternToken1 => "token_repetition_pattern_token1",
            Rust::PLUS => "+",
            Rust::STAR => "*",
            Rust::QMARK => "?",
            Rust::Block2 => "block",
            Rust::Expr => "expr",
            Rust::Expr2021 => "expr_2021",
            Rust::Ident => "ident",
            Rust::Item => "item",
            Rust::Lifetime2 => "lifetime",
            Rust::Literal => "literal",
            Rust::Meta => "meta",
            Rust::Pat => "pat",
            Rust::PatParam => "pat_param",
            Rust::Path => "path",
            Rust::Stmt => "stmt",
            Rust::Tt => "tt",
            Rust::Ty => "ty",
            Rust::Vis => "vis",
            Rust::PrimitiveType => "primitive_type",
            Rust::PrimitiveType2 => "primitive_type",
            Rust::PrimitiveType3 => "primitive_type",
            Rust::PrimitiveType4 => "primitive_type",
            Rust::PrimitiveType5 => "primitive_type",
            Rust::PrimitiveType6 => "primitive_type",
            Rust::PrimitiveType7 => "primitive_type",
            Rust::PrimitiveType8 => "primitive_type",
            Rust::PrimitiveType9 => "primitive_type",
            Rust::PrimitiveType10 => "primitive_type",
            Rust::PrimitiveType11 => "primitive_type",
            Rust::PrimitiveType12 => "primitive_type",
            Rust::PrimitiveType13 => "primitive_type",
            Rust::PrimitiveType14 => "primitive_type",
            Rust::PrimitiveType15 => "primitive_type",
            Rust::PrimitiveType16 => "primitive_type",
            Rust::PrimitiveType17 => "primitive_type",
            Rust::DASH => "-",
            Rust::SLASH => "/",
            Rust::PERCENT => "%",
            Rust::CARET => "^",
            Rust::BANG => "!",
            Rust::AMP => "&",
            Rust::PIPE => "|",
            Rust::AMPAMP => "&&",
            Rust::PIPEPIPE => "||",
            Rust::LTLT => "<<",
            Rust::GTGT => ">>",
            Rust::PLUSEQ => "+=",
            Rust::DASHEQ => "-=",
            Rust::STAREQ => "*=",
            Rust::SLASHEQ => "/=",
            Rust::PERCENTEQ => "%=",
            Rust::CARETEQ => "^=",
            Rust::AMPEQ => "&=",
            Rust::PIPEEQ => "|=",
            Rust::LTLTEQ => "<<=",
            Rust::GTGTEQ => ">>=",
            Rust::EQ => "=",
            Rust::EQEQ => "==",
            Rust::BANGEQ => "!=",
            Rust::GT => ">",
            Rust::LT => "<",
            Rust::GTEQ => ">=",
            Rust::LTEQ => "<=",
            Rust::AT => "@",
            Rust::UNDERSCORE => "_",
            Rust::DOT => ".",
            Rust::DOTDOT => "..",
            Rust::DOTDOTDOT => "...",
            Rust::DOTDOTEQ => "..=",
            Rust::COMMA => ",",
            Rust::COLONCOLON => "::",
            Rust::DASHGT => "->",
            Rust::HASH => "#",
            Rust::SQUOTE => "'",
            Rust::As => "as",
            Rust::Async => "async",
            Rust::Await => "await",
            Rust::Break => "break",
            Rust::Const => "const",
            Rust::Continue => "continue",
            Rust::Default => "default",
            Rust::Enum => "enum",
            Rust::Fn => "fn",
            Rust::For => "for",
            Rust::Gen => "gen",
            Rust::If => "if",
            Rust::Impl => "impl",
            Rust::Let => "let",
            Rust::Loop => "loop",
            Rust::Match => "match",
            Rust::Mod => "mod",
            Rust::Pub => "pub",
            Rust::Return => "return",
            Rust::Static => "static",
            Rust::Struct => "struct",
            Rust::Trait => "trait",
            Rust::Type => "type",
            Rust::Union => "union",
            Rust::Unsafe => "unsafe",
            Rust::Use => "use",
            Rust::Where => "where",
            Rust::While => "while",
            Rust::Extern => "extern",
            Rust::Ref => "ref",
            Rust::Else => "else",
            Rust::In => "in",
            Rust::LT2 => "<",
            Rust::Dyn => "dyn",
            Rust::MutableSpecifier => "mutable_specifier",
            Rust::Raw => "raw",
            Rust::Yield => "yield",
            Rust::Move => "move",
            Rust::Try => "try",
            Rust::IntegerLiteral => "integer_literal",
            Rust::DQUOTE => "\"",
            Rust::DQUOTE2 => "\"",
            Rust::CharLiteral => "char_literal",
            Rust::EscapeSequence => "escape_sequence",
            Rust::True => "true",
            Rust::False => "false",
            Rust::SLASHSLASH => "//",
            Rust::LineCommentToken1 => "line_comment_token1",
            Rust::LineCommentToken2 => "line_comment_token2",
            Rust::LineCommentToken3 => "line_comment_token3",
            Rust::BANG2 => "!",
            Rust::SLASH2 => "/",
            Rust::SLASHSTAR => "/*",
            Rust::STARSLASH => "*/",
            Rust::Shebang => "shebang",
            Rust::Zelf => "self",
            Rust::Super => "super",
            Rust::Crate => "crate",
            Rust::Metavariable => "metavariable",
            Rust::StringContent => "string_content",
            Rust::RawStringLiteralStart => "_raw_string_literal_start",
            Rust::StringContent2 => "string_content",
            Rust::RawStringLiteralEnd => "_raw_string_literal_end",
            Rust::FloatLiteral => "float_literal",
            Rust::OuterDocCommentMarker => "outer_doc_comment_marker",
            Rust::InnerDocCommentMarker => "inner_doc_comment_marker",
            Rust::BlockCommentContent => "_block_comment_content",
            Rust::DocComment => "doc_comment",
            Rust::ErrorSentinel => "_error_sentinel",
            Rust::SourceFile => "source_file",
            Rust::Statement => "_statement",
            Rust::EmptyStatement => "empty_statement",
            Rust::ExpressionStatement => "expression_statement",
            Rust::MacroDefinition => "macro_definition",
            Rust::MacroRule => "macro_rule",
            Rust::TokenPattern => "_token_pattern",
            Rust::TokenTreePattern => "token_tree_pattern",
            Rust::TokenBindingPattern => "token_binding_pattern",
            Rust::TokenRepetitionPattern => "token_repetition_pattern",
            Rust::FragmentSpecifier => "fragment_specifier",
            Rust::TokenTree => "token_tree",
            Rust::TokenRepetition => "token_repetition",
            Rust::AttributeItem => "attribute_item",
            Rust::InnerAttributeItem => "inner_attribute_item",
            Rust::Attribute => "attribute",
            Rust::ModItem => "mod_item",
            Rust::ForeignModItem => "foreign_mod_item",
            Rust::DeclarationList => "declaration_list",
            Rust::StructItem => "struct_item",
            Rust::UnionItem => "union_item",
            Rust::EnumItem => "enum_item",
            Rust::EnumVariantList => "enum_variant_list",
            Rust::EnumVariant => "enum_variant",
            Rust::FieldDeclarationList => "field_declaration_list",
            Rust::FieldDeclaration => "field_declaration",
            Rust::OrderedFieldDeclarationList => "ordered_field_declaration_list",
            Rust::ExternCrateDeclaration => "extern_crate_declaration",
            Rust::ConstItem => "const_item",
            Rust::StaticItem => "static_item",
            Rust::TypeItem => "type_item",
            Rust::FunctionItem => "function_item",
            Rust::FunctionSignatureItem => "function_signature_item",
            Rust::FunctionModifiers => "function_modifiers",
            Rust::WhereClause => "where_clause",
            Rust::WherePredicate => "where_predicate",
            Rust::ImplItem => "impl_item",
            Rust::TraitItem => "trait_item",
            Rust::AssociatedType => "associated_type",
            Rust::TraitBounds => "trait_bounds",
            Rust::HigherRankedTraitBound => "higher_ranked_trait_bound",
            Rust::RemovedTraitBound => "removed_trait_bound",
            Rust::TypeParameters => "type_parameters",
            Rust::ConstParameter => "const_parameter",
            Rust::TypeParameter => "type_parameter",
            Rust::LifetimeParameter => "lifetime_parameter",
            Rust::LetDeclaration => "let_declaration",
            Rust::UseDeclaration => "use_declaration",
            Rust::UseClause => "_use_clause",
            Rust::ScopedUseList => "scoped_use_list",
            Rust::UseList => "use_list",
            Rust::UseAsClause => "use_as_clause",
            Rust::UseWildcard => "use_wildcard",
            Rust::Parameters => "parameters",
            Rust::SelfParameter => "self_parameter",
            Rust::VariadicParameter => "variadic_parameter",
            Rust::Parameter => "parameter",
            Rust::ExternModifier => "extern_modifier",
            Rust::VisibilityModifier => "visibility_modifier",
            Rust::Type2 => "_type",
            Rust::BracketedType => "bracketed_type",
            Rust::QualifiedType => "qualified_type",
            Rust::Lifetime => "lifetime",
            Rust::ArrayType => "array_type",
            Rust::ForLifetimes => "for_lifetimes",
            Rust::FunctionType => "function_type",
            Rust::TupleType => "tuple_type",
            Rust::UnitType => "unit_type",
            Rust::GenericFunction => "generic_function",
            Rust::GenericType => "generic_type",
            Rust::GenericTypeWithTurbofish => "generic_type_with_turbofish",
            Rust::BoundedType => "bounded_type",
            Rust::UseBounds => "use_bounds",
            Rust::TypeArguments => "type_arguments",
            Rust::TypeBinding => "type_binding",
            Rust::ReferenceType => "reference_type",
            Rust::PointerType => "pointer_type",
            Rust::NeverType => "never_type",
            Rust::AbstractType => "abstract_type",
            Rust::DynamicType => "dynamic_type",
            Rust::ExpressionExceptRange => "_expression_except_range",
            Rust::Expression => "_expression",
            Rust::MacroInvocation => "macro_invocation",
            Rust::TokenTree2 => "token_tree",
            Rust::DelimTokens => "_delim_tokens",
            Rust::NonDelimToken => "_non_delim_token",
            Rust::ScopedIdentifier => "scoped_identifier",
            Rust::ScopedTypeIdentifier => "scoped_type_identifier",
            Rust::ScopedTypeIdentifier2 => "scoped_type_identifier",
            Rust::RangeExpression => "range_expression",
            Rust::UnaryExpression => "unary_expression",
            Rust::TryExpression => "try_expression",
            Rust::ReferenceExpression => "reference_expression",
            Rust::BinaryExpression => "binary_expression",
            Rust::AssignmentExpression => "assignment_expression",
            Rust::CompoundAssignmentExpr => "compound_assignment_expr",
            Rust::TypeCastExpression => "type_cast_expression",
            Rust::ReturnExpression => "return_expression",
            Rust::YieldExpression => "yield_expression",
            Rust::CallExpression => "call_expression",
            Rust::Arguments => "arguments",
            Rust::ArrayExpression => "array_expression",
            Rust::ParenthesizedExpression => "parenthesized_expression",
            Rust::TupleExpression => "tuple_expression",
            Rust::UnitExpression => "unit_expression",
            Rust::StructExpression => "struct_expression",
            Rust::FieldInitializerList => "field_initializer_list",
            Rust::ShorthandFieldInitializer => "shorthand_field_initializer",
            Rust::FieldInitializer => "field_initializer",
            Rust::BaseFieldInitializer => "base_field_initializer",
            Rust::IfExpression => "if_expression",
            Rust::LetCondition => "let_condition",
            Rust::LetChain2 => "_let_chain",
            Rust::Condition => "_condition",
            Rust::ElseClause => "else_clause",
            Rust::MatchExpression => "match_expression",
            Rust::MatchBlock => "match_block",
            Rust::MatchArm => "match_arm",
            Rust::MatchArm2 => "match_arm",
            Rust::MatchPattern => "match_pattern",
            Rust::WhileExpression => "while_expression",
            Rust::LoopExpression => "loop_expression",
            Rust::ForExpression => "for_expression",
            Rust::ConstBlock => "const_block",
            Rust::ClosureExpression => "closure_expression",
            Rust::ClosureParameters => "closure_parameters",
            Rust::Label => "label",
            Rust::BreakExpression => "break_expression",
            Rust::ContinueExpression => "continue_expression",
            Rust::IndexExpression => "index_expression",
            Rust::AwaitExpression => "await_expression",
            Rust::FieldExpression => "field_expression",
            Rust::UnsafeBlock => "unsafe_block",
            Rust::AsyncBlock => "async_block",
            Rust::GenBlock => "gen_block",
            Rust::TryBlock => "try_block",
            Rust::Block => "block",
            Rust::Pattern => "_pattern",
            Rust::GenericPattern => "generic_pattern",
            Rust::TuplePattern => "tuple_pattern",
            Rust::SlicePattern => "slice_pattern",
            Rust::TupleStructPattern => "tuple_struct_pattern",
            Rust::StructPattern => "struct_pattern",
            Rust::FieldPattern => "field_pattern",
            Rust::RemainingFieldPattern => "remaining_field_pattern",
            Rust::MutPattern => "mut_pattern",
            Rust::RangePattern => "range_pattern",
            Rust::RefPattern => "ref_pattern",
            Rust::CapturedPattern => "captured_pattern",
            Rust::ReferencePattern => "reference_pattern",
            Rust::OrPattern => "or_pattern",
            Rust::Literal2 => "_literal",
            Rust::LiteralPattern => "_literal_pattern",
            Rust::NegativeLiteral => "negative_literal",
            Rust::StringLiteral => "string_literal",
            Rust::RawStringLiteral => "raw_string_literal",
            Rust::BooleanLiteral => "boolean_literal",
            Rust::LineComment => "line_comment",
            Rust::LineDocCommentMarker => "_line_doc_comment_marker",
            Rust::InnerDocCommentMarker2 => "inner_doc_comment_marker",
            Rust::OuterDocCommentMarker2 => "outer_doc_comment_marker",
            Rust::BlockComment => "block_comment",
            Rust::BlockDocCommentMarker => "_block_doc_comment_marker",
            Rust::SourceFileRepeat1 => "source_file_repeat1",
            Rust::MacroDefinitionRepeat1 => "macro_definition_repeat1",
            Rust::TokenTreePatternRepeat1 => "token_tree_pattern_repeat1",
            Rust::TokenTreeRepeat1 => "token_tree_repeat1",
            Rust::NonSpecialTokenRepeat1 => "_non_special_token_repeat1",
            Rust::DeclarationListRepeat1 => "declaration_list_repeat1",
            Rust::EnumVariantListRepeat1 => "enum_variant_list_repeat1",
            Rust::EnumVariantListRepeat2 => "enum_variant_list_repeat2",
            Rust::FieldDeclarationListRepeat1 => "field_declaration_list_repeat1",
            Rust::OrderedFieldDeclarationListRepeat1 => "ordered_field_declaration_list_repeat1",
            Rust::FunctionModifiersRepeat1 => "function_modifiers_repeat1",
            Rust::WhereClauseRepeat1 => "where_clause_repeat1",
            Rust::TraitBoundsRepeat1 => "trait_bounds_repeat1",
            Rust::TypeParametersRepeat1 => "type_parameters_repeat1",
            Rust::UseListRepeat1 => "use_list_repeat1",
            Rust::ParametersRepeat1 => "parameters_repeat1",
            Rust::ForLifetimesRepeat1 => "for_lifetimes_repeat1",
            Rust::TupleTypeRepeat1 => "tuple_type_repeat1",
            Rust::UseBoundsRepeat1 => "use_bounds_repeat1",
            Rust::TypeArgumentsRepeat1 => "type_arguments_repeat1",
            Rust::DelimTokenTreeRepeat1 => "delim_token_tree_repeat1",
            Rust::ArgumentsRepeat1 => "arguments_repeat1",
            Rust::TupleExpressionRepeat1 => "tuple_expression_repeat1",
            Rust::FieldInitializerListRepeat1 => "field_initializer_list_repeat1",
            Rust::MatchBlockRepeat1 => "match_block_repeat1",
            Rust::MatchArmRepeat1 => "match_arm_repeat1",
            Rust::ClosureParametersRepeat1 => "closure_parameters_repeat1",
            Rust::TuplePatternRepeat1 => "tuple_pattern_repeat1",
            Rust::SlicePatternRepeat1 => "slice_pattern_repeat1",
            Rust::StructPatternRepeat1 => "struct_pattern_repeat1",
            Rust::StringLiteralRepeat1 => "string_literal_repeat1",
            Rust::FieldIdentifier => "field_identifier",
            Rust::LetChain => "let_chain",
            Rust::ShorthandFieldIdentifier => "shorthand_field_identifier",
            Rust::TypeIdentifier => "type_identifier",
            Rust::Error => "ERROR",
        }
    }
}

impl From<u16> for Rust {
    #[inline(always)]
    fn from(x: u16) -> Self {
        num::FromPrimitive::from_u16(x).unwrap_or(Self::Error)
    }
}

// Rust == u16
impl PartialEq<u16> for Rust {
    #[inline(always)]
    fn eq(&self, x: &u16) -> bool {
        *self == Into::<Self>::into(*x)
    }
}

// u16 == Rust
impl PartialEq<Rust> for u16 {
    #[inline(always)]
    fn eq(&self, x: &Rust) -> bool {
        *x == *self
    }
}
