#[cfg(feature = "pretty-print")]
mod display;
use super::*;
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct IfStatement {
pub branches: Vec<ConditionNode>,
pub else_branch: Vec<StatementNode>,
pub span: Range<u32>,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ConditionNode {
pub condition: ConditionType,
pub body: StatementBlock,
pub span: Range<u32>,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ConditionType {
AlwaysTrue,
Case,
Expression(Box<ExpressionNode>),
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CasePatternNode {
pub span: Range<u32>,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct ElsePart {
pub statements: Vec<StatementNode>,
pub span: Range<u32>,
}
impl ConditionType {
pub fn is_empty(&self) -> bool {
match self {
ConditionType::AlwaysTrue => true,
_ => false,
}
}
}