code_gen/statement/
semi.rs1use crate::{CodeBuffer, Expression, Literal, Statement};
2
3pub struct Semi<E: Expression> {
5 expression: E,
6}
7
8impl<E: Expression> From<E> for Semi<E> {
9 fn from(expression: E) -> Self {
10 Self { expression }
11 }
12}
13
14impl From<&str> for Semi<Literal> {
15 fn from(value: &str) -> Self {
16 Self::from(Literal::from(value))
17 }
18}
19
20impl From<String> for Semi<Literal> {
21 fn from(value: String) -> Self {
22 Self::from(Literal::from(value))
23 }
24}
25
26impl<E: Expression> Statement for Semi<E> {
27 fn write(&self, b: &mut CodeBuffer, level: usize) {
28 b.indent(level);
29 self.expression.write(b);
30 b.push(';');
31 b.end_line();
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use super::*;
38
39 #[test]
40 fn semi_from_str() {
41 let semi = Semi::from("let x = 1");
42 assert_eq!(semi.to_code(), "let x = 1;\n");
43 }
44
45 #[test]
46 fn semi_from_string() {
47 let semi = Semi::from(String::from("let x = 1"));
48 assert_eq!(semi.to_code(), "let x = 1;\n");
49 }
50
51 #[test]
52 fn semi_indented() {
53 let semi = Semi::from("x");
54 let mut b = CodeBuffer::default();
55 semi.write(&mut b, 2);
56 assert_eq!(b.peek(), " x;\n");
57 }
58}