#![allow(missing_docs)]
use super::expr::ExprAst;
use super::text::Text;
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct Conditional<T, Body> {
pub branches: Vec<CondBranch<T, Body>>,
pub otherwise: Option<Vec<Body>>,
pub data: T,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct CondBranch<T, Body> {
pub kind: CondKind,
pub expr: CondExpr<T>,
pub body: Vec<Body>,
pub data: T,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub enum CondKind {
If,
IfArch,
IfNArch,
IfOs,
IfNOs,
Elif,
ElifArch,
ElifOs,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub enum CondExpr<T = ()> {
Raw(Text),
Parsed(Box<ExprAst<T>>),
ArchList(Vec<Text>),
}