#[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 IfStatementNode {
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: Vec<StatementNode>,
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<'i> {
pub body: Cow<'i, [StatementNode]>,
}
impl ConditionType {
pub fn is_empty(&self) -> bool {
match self {
ConditionType::AlwaysTrue => true,
_ => false,
}
}
}