use crate::types::{ActionDefinition, DerivedPredicate, DurativeActionDefinition};
#[derive(Debug, Clone, PartialEq)]
pub enum StructureDef {
Action(ActionDefinition),
DurativeAction(Box<DurativeActionDefinition>),
Derived(DerivedPredicate),
}
impl StructureDef {
#[doc(alias = "new_action")]
pub const fn action(action: ActionDefinition) -> Self {
Self::Action(action)
}
pub fn new_action(action: ActionDefinition) -> Self {
Self::action(action)
}
#[doc(alias = "new_durative_action")]
pub fn durative_action(action: DurativeActionDefinition) -> Self {
Self::DurativeAction(Box::new(action))
}
pub fn new_durative_action(action: DurativeActionDefinition) -> Self {
Self::durative_action(action)
}
#[doc(alias = "new_derived")]
pub const fn derived(predicate: DerivedPredicate) -> Self {
Self::Derived(predicate)
}
pub fn new_derived(predicate: DerivedPredicate) -> Self {
Self::derived(predicate)
}
}
impl From<ActionDefinition> for StructureDef {
fn from(value: ActionDefinition) -> Self {
StructureDef::action(value)
}
}
impl From<DurativeActionDefinition> for StructureDef {
fn from(value: DurativeActionDefinition) -> Self {
StructureDef::durative_action(value)
}
}
impl From<DerivedPredicate> for StructureDef {
fn from(value: DerivedPredicate) -> Self {
StructureDef::derived(value)
}
}