use crate::error::DomainError;
use crate::value_objects::{CeremonyDefinitionDigest, CeremonyName, CeremonyVersion};
use super::CeremonyDefinition;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PublishedCeremonyDefinition {
definition: CeremonyDefinition,
digest: CeremonyDefinitionDigest,
}
impl PublishedCeremonyDefinition {
pub fn seal(definition: CeremonyDefinition) -> Result<Self, DomainError> {
let digest = definition.digest()?;
Ok(Self { definition, digest })
}
#[must_use]
pub fn definition(&self) -> &CeremonyDefinition {
&self.definition
}
#[must_use]
pub fn digest(&self) -> CeremonyDefinitionDigest {
self.digest
}
#[must_use]
pub fn name(&self) -> &CeremonyName {
self.definition.name()
}
#[must_use]
pub fn version(&self) -> &CeremonyVersion {
self.definition.version()
}
#[must_use]
pub fn into_definition(self) -> CeremonyDefinition {
self.definition
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PublicationOutcome {
Published(PublishedCeremonyDefinition),
AlreadyPublished(PublishedCeremonyDefinition),
VersionOccupied {
published: CeremonyDefinitionDigest,
offered: CeremonyDefinitionDigest,
},
}
impl PublicationOutcome {
#[must_use]
pub fn published(&self) -> Option<&PublishedCeremonyDefinition> {
match self {
Self::Published(published) | Self::AlreadyPublished(published) => Some(published),
Self::VersionOccupied { .. } => None,
}
}
#[must_use]
pub fn is_conflict(&self) -> bool {
matches!(self, Self::VersionOccupied { .. })
}
#[must_use]
pub fn is_new(&self) -> bool {
matches!(self, Self::Published(_))
}
}