use oak_core::{ElementType, UniversalElementRole};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum RustElementType {
As,
Break,
Const,
Continue,
Crate,
Else,
Enum,
Extern,
False,
Fn,
For,
If,
Impl,
In,
Let,
Loop,
Match,
Mod,
Move,
Mut,
Pub,
Ref,
Return,
SelfLower,
SelfUpper,
Static,
Struct,
Super,
Trait,
True,
Type,
Unsafe,
Use,
Where,
While,
Abstract,
Become,
Box,
Do,
Final,
Macro,
Override,
Priv,
Typeof,
Unsized,
Virtual,
Yield,
Async,
Await,
Dyn,
Try,
Union,
Raw,
IntegerLiteral,
FloatLiteral,
StringLiteral,
CharLiteral,
ByteLiteral,
ByteStringLiteral,
RawStringLiteral,
BoolLiteral,
Identifier,
Lifetime,
LeftParen,
RightParen,
LeftBrace,
RightBrace,
LeftBracket,
RightBracket,
Semicolon,
Comma,
Dot,
DotDot,
DotDotDot,
DotDotEq,
Colon,
DoubleColon,
PathSep,
Question,
At,
Hash,
Dollar,
Plus,
Minus,
Star,
Slash,
Percent,
Caret,
Ampersand,
Pipe,
Tilde,
Bang,
Eq,
Lt,
Gt,
LessThan,
GreaterThan,
EqEq,
Ne,
Le,
Ge,
LessEq,
GreaterEq,
AndAnd,
OrOr,
LeftShift,
RightShift,
Shl,
Shr,
PlusEq,
MinusEq,
StarEq,
SlashEq,
PercentEq,
CaretEq,
AndEq,
OrEq,
ShlEq,
ShrEq,
LeftShiftEq,
RightShiftEq,
Assign,
PlusAssign,
MinusAssign,
StarAssign,
SlashAssign,
PercentAssign,
AmpAssign,
PipeAssign,
CaretAssign,
ShlAssign,
ShrAssign,
Arrow,
FatArrow,
Space,
Newline,
Whitespace,
LineComment,
BlockComment,
DocComment,
PlusPlus,
MinusMinus,
Eof,
Error,
IdentifierExpression,
LiteralExpression,
ParenthesizedExpression,
UnaryExpression,
BinaryExpression,
CallExpression,
IndexExpression,
FieldExpression,
SourceFile,
Function,
ReturnType,
UseItem,
ModuleItem,
StructItem,
EnumItem,
LetStatement,
IfExpression,
WhileExpression,
LoopExpression,
ForExpression,
ReturnStatement,
Block,
ParameterList,
BlockExpression,
Parameter,
ExpressionStatement,
ItemStatement,
Pattern,
Expression,
ArgumentList,
TypeAlias,
MemberExpression,
StructBody,
EnumBody,
TraitBody,
ImplBody,
ModuleBody,
Variant,
TraitItem,
ImplItem,
TraitRef,
TupleBody,
ReferenceType,
TupleType,
ArrayType,
TuplePattern,
UsePath,
Field,
}
impl ElementType for RustElementType {
type Role = UniversalElementRole;
fn role(&self) -> Self::Role {
match self {
Self::Error => UniversalElementRole::Error,
_ => UniversalElementRole::None,
}
}
}
impl From<crate::lexer::token_type::RustTokenType> for RustElementType {
fn from(token: crate::lexer::token_type::RustTokenType) -> Self {
unsafe { std::mem::transmute(token) }
}
}