oak_protobuf/parser/
element_type.rs1use oak_core::{ElementType, UniversalElementRole};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum ProtobufElementType {
7 Root,
9 Whitespace,
11 Newline,
13 Comment,
15 Error,
17 Eof,
19
20 SyntaxDef,
22 PackageDef,
24 ImportDef,
26 OptionDef,
28 MessageDef,
30 EnumDef,
32 ServiceDef,
34 RpcDef,
36 FieldDef,
38 MapFieldDef,
40 OneofDef,
42
43 Identifier,
45 StringLiteral,
47 NumberLiteral,
49 BooleanLiteral,
51}
52
53impl ElementType for ProtobufElementType {
54 type Role = UniversalElementRole;
55
56 fn role(&self) -> Self::Role {
57 match self {
58 Self::Root => UniversalElementRole::Root,
59 _ => UniversalElementRole::None,
60 }
61 }
62}
63
64impl From<crate::lexer::token_type::ProtobufTokenType> for ProtobufElementType {
65 fn from(token: crate::lexer::token_type::ProtobufTokenType) -> Self {
66 use crate::lexer::token_type::ProtobufTokenType as T;
67 match token {
68 T::Whitespace => Self::Whitespace,
69 T::Newline => Self::Newline,
70 T::Comment => Self::Comment,
71 T::Identifier => Self::Identifier,
72 T::StringLiteral => Self::StringLiteral,
73 T::NumberLiteral => Self::NumberLiteral,
74 T::BooleanLiteral => Self::BooleanLiteral,
75 T::Error => Self::Error,
76 _ => Self::Error,
77 }
78 }
79}