chem_parse/
token_types.rs1use core::fmt::Debug;
2
3#[derive(Debug, PartialEq)]
6pub enum ParenType {
7 OPEN,
8 CLOSE,
9}
10
11#[derive(Debug)]
13pub enum Tokens {
14 Element { data: String, meta: TokenMetadata },
16 Number { data: u16, meta: TokenMetadata },
18 Paren {
20 data: ParenType,
21 meta: TokenMetadata,
22 },
23 Plus { meta: TokenMetadata },
25 Yields { meta: TokenMetadata },
27}
28
29impl Tokens {
30 pub fn meta(&self) -> &TokenMetadata {
31 match self {
32 Self::Element { meta, data: _ } => meta,
33 Self::Number { meta, data: _ } => meta,
34 Self::Paren { meta, data: _ } => meta,
35 Self::Plus { meta } => meta,
36 Self::Yields { meta } => meta,
37 }
38 }
39}
40
41impl PartialEq for Tokens {
42 fn eq(&self, other: &Self) -> bool {
43 match (self, other) {
44 (
45 Self::Element {
46 data: l_data,
47 meta: _,
48 },
49 Self::Element {
50 data: r_data,
51 meta: _,
52 },
53 ) => l_data == r_data,
54 (
55 Self::Number {
56 data: l_data,
57 meta: _,
58 },
59 Self::Number {
60 data: r_data,
61 meta: _,
62 },
63 ) => l_data == r_data,
64 (
65 Self::Paren {
66 data: l_data,
67 meta: _,
68 },
69 Self::Paren {
70 data: r_data,
71 meta: _,
72 },
73 ) => l_data == r_data,
74 (Self::Plus { meta: _ }, Self::Plus { meta: _ }) => true,
75 (Self::Yields { meta: _ }, Self::Yields { meta: _ }) => true,
76 _ => false,
77 }
78 }
79}
80
81#[derive(Debug)]
82pub struct TokenMetadata {
83 raw: String,
84 location: usize,
85}
86
87impl TokenMetadata {
88 pub fn new(raw: &str, location: usize) -> Self {
89 Self {
90 raw: raw.into(),
91 location,
92 }
93 }
94 pub fn raw(&self) -> &String {
95 &self.raw
96 }
97 pub fn loc(&self) -> usize {
98 self.location
99 }
100}