darklua_core/nodes/expressions/
field.rs1use crate::nodes::{Identifier, Prefix, Token};
2
3#[derive(Clone, Debug, PartialEq, Eq)]
9pub struct FieldExpression {
10 prefix: Prefix,
11 field: Identifier,
12 token: Option<Token>,
13}
14
15impl FieldExpression {
16 pub fn new<IntoPrefix: Into<Prefix>, IntoIdentifier: Into<Identifier>>(
18 prefix: IntoPrefix,
19 field: IntoIdentifier,
20 ) -> Self {
21 Self {
22 prefix: prefix.into(),
23 field: field.into(),
24 token: None,
25 }
26 }
27
28 pub fn with_token(mut self, token: Token) -> Self {
30 self.token = Some(token);
31 self
32 }
33
34 #[inline]
36 pub fn set_token(&mut self, token: Token) {
37 self.token = Some(token);
38 }
39
40 #[inline]
42 pub fn get_token(&self) -> Option<&Token> {
43 self.token.as_ref()
44 }
45
46 #[inline]
48 pub fn get_prefix(&self) -> &Prefix {
49 &self.prefix
50 }
51
52 #[inline]
54 pub fn get_field(&self) -> &Identifier {
55 &self.field
56 }
57
58 pub fn mutate_prefix(&mut self) -> &mut Prefix {
60 &mut self.prefix
61 }
62
63 pub fn mutate_first_token(&mut self) -> &mut Token {
66 self.prefix.mutate_first_token()
67 }
68
69 pub fn mutate_last_token(&mut self) -> &mut Token {
72 self.field.mutate_or_insert_token()
73 }
74
75 super::impl_token_fns!(
76 target = [field]
77 iter = [token]
78 );
79}