code_gen/rust/var/
const_init.rs1use crate::rust::{Access, CommentType, Var, WithAccess, WithComments, WithVar};
2use crate::{CodeBuffer, Expression, Statement};
3
4pub 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}