1use oak_core::{ElementType, TokenType, UniversalElementRole, UniversalTokenRole};
2use serde::{Deserialize, Serialize};
3
4#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
5pub enum WitSyntaxKind {
6 Root,
8 Whitespace,
9 Newline,
10 Comment,
11 Error,
12 Eof,
13 Text,
14
15 IntegerLiteral,
17 FloatLiteral,
18 StringLiteral,
19 Identifier,
20
21 WorldKw,
23 InterfaceKw,
24 PackageKw,
25 ComponentKw,
26 InstanceKw,
27 ModuleKw,
28 CoreKw,
29 FuncKw,
30 TypeKw,
31 RecordKw,
32 VariantKw,
33 EnumKw,
34 FlagsKw,
35 UnionKw,
36 TupleKw,
37 ListKw,
38 OptionKw,
39 ResultKw,
40 ResourceKw,
41
42 ImportKw,
44 ExportKw,
45 UseKw,
46 IncludeKw,
47 WithKw,
48
49 StaticKw,
51 ConstructorKw,
52 MethodKw,
53
54 BoolKw,
56 U8Kw,
57 U16Kw,
58 U32Kw,
59 U64Kw,
60 S8Kw,
61 S16Kw,
62 S32Kw,
63 S64Kw,
64 F32Kw,
65 F64Kw,
66 CharKw,
67 StringKw,
68
69 Arrow, FatArrow, Assign, Colon, Semicolon, Comma, Dot, Question, At, Hash, Dollar, Percent, Ampersand, Star, Plus, Minus, Slash, Lt, Gt, Pipe, Caret, Tilde, Bang, LeftParen, RightParen, LeftBrace, RightBrace, LeftBracket, RightBracket, }
102
103impl std::fmt::Display for WitSyntaxKind {
104 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
105 write!(f, "{:?}", self)
106 }
107}
108
109impl TokenType for WitSyntaxKind {
110 const END_OF_STREAM: Self = Self::Eof;
111 type Role = UniversalTokenRole;
112
113 fn role(&self) -> Self::Role {
114 match self {
115 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
116 Self::Comment => UniversalTokenRole::Comment,
117 Self::Eof => UniversalTokenRole::Eof,
118 _ => UniversalTokenRole::None,
119 }
120 }
121}
122
123impl ElementType for WitSyntaxKind {
124 type Role = UniversalElementRole;
125
126 fn is_root(&self) -> bool {
127 matches!(self, Self::Root)
128 }
129
130 fn role(&self) -> Self::Role {
131 match self {
132 Self::Root => UniversalElementRole::Root,
133 Self::Error => UniversalElementRole::Error,
134 _ => UniversalElementRole::None,
135 }
136 }
137}