1use oak_core::{ElementType, TokenType, UniversalElementRole, UniversalTokenRole};
2use serde::{Deserialize, Serialize};
3
4#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
5pub enum IniSyntaxKind {
6 Whitespace,
8 Newline,
9 Comment,
10 Error,
11 Eof,
12
13 Root,
15 Document,
16 Table,
17 ArrayOfTables,
18 Array,
19 InlineTable,
20 KeyValue,
21 Key,
22 Value,
23
24 LeftBrace, RightBrace, LeftBracket, RightBracket, DoubleLeftBracket, DoubleRightBracket, Comma, Dot, Equal, Identifier,
37 String,
38 Integer,
39 Float,
40 Boolean,
41 DateTime,
42}
43
44impl IniSyntaxKind {
45 pub fn is_trivia(&self) -> bool {
46 matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
47 }
48}
49
50impl TokenType for IniSyntaxKind {
51 const END_OF_STREAM: Self = Self::Eof;
52 type Role = UniversalTokenRole;
53
54 fn role(&self) -> Self::Role {
55 match self {
56 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
57 Self::Comment => UniversalTokenRole::Comment,
58 Self::Eof => UniversalTokenRole::Eof,
59 Self::LeftBrace | Self::RightBrace | Self::LeftBracket | Self::RightBracket | Self::DoubleLeftBracket | Self::DoubleRightBracket | Self::Comma | Self::Dot | Self::Equal => UniversalTokenRole::Punctuation,
60 Self::Identifier => UniversalTokenRole::Name,
61 Self::String | Self::Integer | Self::Float | Self::Boolean | Self::DateTime => UniversalTokenRole::Literal,
62 _ => UniversalTokenRole::None,
63 }
64 }
65}
66
67impl ElementType for IniSyntaxKind {
68 type Role = UniversalElementRole;
69
70 fn role(&self) -> Self::Role {
71 match self {
72 Self::Root | Self::Document => UniversalElementRole::Root,
73 Self::Table | Self::ArrayOfTables | Self::Array | Self::InlineTable => UniversalElementRole::Container,
74 Self::KeyValue => UniversalElementRole::Statement,
75 Self::Key => UniversalElementRole::Name,
76 Self::Value => UniversalElementRole::Value,
77 Self::String | Self::Integer | Self::Float | Self::Boolean | Self::DateTime => UniversalElementRole::Value,
78 Self::Error => UniversalElementRole::Error,
79 _ => UniversalElementRole::None,
80 }
81 }
82
83 fn is_root(&self) -> bool {
84 matches!(self, Self::Root | Self::Document)
85 }
86
87 fn is_error(&self) -> bool {
88 matches!(self, Self::Error)
89 }
90}