code_gen/rust/var/
const_init.rs

1use crate::rust::{Access, CommentType, Var, WithAccess, WithComments, WithVar};
2use crate::{CodeBuffer, Expression, Statement};
3
4/// A const initialization statement.
5pub struct ConstInit {
6    comments: Vec<String>,
7    access: Access,
8    var: Var,
9    expression: Box<dyn Expression>,
10}
11
12impl<V: Into<Var>, E: 'static + Expression> From<(V, E)> for ConstInit {
13    fn from(t: (V, E)) -> Self {
14        Self {
15            comments: Vec::default(),
16            access: Access::default(),
17            var: t.0.into(),
18            expression: Box::new(t.1),
19        }
20    }
21}
22
23impl WithComments for ConstInit {
24    fn comments(&self) -> &[String] {
25        self.comments.as_slice()
26    }
27
28    fn add_comment<S>(&mut self, comment: S)
29    where
30        S: Into<String>,
31    {
32        self.comments.push(comment.into());
33    }
34}
35
36impl WithAccess for ConstInit {
37    fn access(&self) -> &Access {
38        &self.access
39    }
40
41    fn set_access<A>(&mut self, access: A)
42    where
43        A: Into<Access>,
44    {
45        self.access = access.into();
46    }
47}
48
49impl WithVar for ConstInit {
50    fn var(&self) -> &Var {
51        &self.var
52    }
53}
54
55impl Statement for ConstInit {
56    fn write(&self, b: &mut CodeBuffer, level: usize) {
57        self.write_comments(CommentType::OuterLineDoc, b, level);
58        b.indent(level);
59        self.write_access(b);
60        b.write("const ");
61        self.write_var(b);
62        b.write(" = ");
63        self.expression.write(b);
64        b.write(";");
65        b.end_line();
66    }
67}