#![allow(missing_docs)]
use super::text::Text;
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub enum DepExpr {
Atom(DepAtom),
Rich(Box<BoolDep>),
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct DepAtom {
pub name: Text,
pub arch: Option<Text>,
pub constraint: Option<DepConstraint>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct DepConstraint {
pub op: VerOp,
pub evr: EVR,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub enum VerOp {
Lt,
Le,
Eq,
Ge,
Gt,
Ne,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct EVR {
pub epoch: Option<u32>,
pub version: Text,
pub release: Option<Text>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub enum BoolDep {
And(Vec<DepExpr>),
Or(Vec<DepExpr>),
If {
cond: Box<DepExpr>,
then: Box<DepExpr>,
otherwise: Option<Box<DepExpr>>,
},
Unless {
cond: Box<DepExpr>,
then: Box<DepExpr>,
otherwise: Option<Box<DepExpr>>,
},
With(Vec<DepExpr>),
Without {
left: Box<DepExpr>,
right: Box<DepExpr>,
},
}