leo_grammar/statements/
conditional_statement.rs1use crate::{
18 ast::Rule,
19 expressions::Expression,
20 statements::{Block, ConditionalNestedOrEndStatement},
21 SpanDef,
22};
23
24use pest::Span;
25use pest_ast::FromPest;
26use serde::Serialize;
27use std::fmt;
28
29#[derive(Clone, Debug, FromPest, PartialEq, Serialize)]
30#[pest_ast(rule(Rule::statement_conditional))]
31pub struct ConditionalStatement<'ast> {
32 pub condition: Expression<'ast>,
33 pub block: Block<'ast>,
34 pub next: Option<ConditionalNestedOrEndStatement<'ast>>,
35 #[pest_ast(outer())]
36 #[serde(with = "SpanDef")]
37 pub span: Span<'ast>,
38}
39
40impl<'ast> fmt::Display for ConditionalStatement<'ast> {
41 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
42 write!(f, "if ({}) {}", self.condition, self.block)?;
43 self.next
44 .as_ref()
45 .map(|n_or_e| write!(f, " {}", n_or_e))
46 .unwrap_or_else(|| write!(f, ""))
47 }
48}