use crate::{Requirement, VersionSetId, VersionSetUnionId, internal::id::ConditionId};
#[derive(Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ConditionalRequirement {
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub condition: Option<ConditionId>,
pub requirement: Requirement,
}
#[derive(Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
pub enum Condition {
Binary(LogicalOperator, ConditionId, ConditionId),
Requirement(VersionSetId),
}
#[derive(Clone, Copy, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
pub enum LogicalOperator {
And,
Or,
}
impl From<Requirement> for ConditionalRequirement {
fn from(value: Requirement) -> Self {
Self {
condition: None,
requirement: value,
}
}
}
impl From<VersionSetId> for ConditionalRequirement {
fn from(value: VersionSetId) -> Self {
Requirement::Single(value).into()
}
}
impl From<VersionSetUnionId> for ConditionalRequirement {
fn from(value: VersionSetUnionId) -> Self {
Requirement::Union(value).into()
}
}