made-core 0.7.4

Domain core of MADE: entities, value objects, events, ports. No IO.
Documentation
use crate::entities::CeremonyEvidencePack;
use crate::error::DomainError;
use crate::value_objects::{
    CeremonyContext, CeremonyEvidenceSourceId, CeremonyId, CeremonyInterventionContent,
    CeremonyInterventionId, RoleId,
};

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CeremonyEvidenceRequest {
    instance_id: CeremonyId,
    intervention_id: CeremonyInterventionId,
    role_id: RoleId,
    source_id: CeremonyEvidenceSourceId,
    query: CeremonyInterventionContent,
    context: CeremonyContext,
}

impl CeremonyEvidenceRequest {
    #[must_use]
    pub fn new(
        instance_id: CeremonyId,
        intervention_id: CeremonyInterventionId,
        role_id: RoleId,
        source_id: CeremonyEvidenceSourceId,
        query: CeremonyInterventionContent,
        context: CeremonyContext,
    ) -> Self {
        Self {
            instance_id,
            intervention_id,
            role_id,
            source_id,
            query,
            context,
        }
    }

    #[must_use]
    pub fn instance_id(&self) -> &CeremonyId {
        &self.instance_id
    }

    #[must_use]
    pub fn intervention_id(&self) -> &CeremonyInterventionId {
        &self.intervention_id
    }

    #[must_use]
    pub fn role_id(&self) -> &RoleId {
        &self.role_id
    }

    #[must_use]
    pub fn source_id(&self) -> &CeremonyEvidenceSourceId {
        &self.source_id
    }

    #[must_use]
    pub fn query(&self) -> &CeremonyInterventionContent {
        &self.query
    }

    #[must_use]
    pub fn context(&self) -> &CeremonyContext {
        &self.context
    }

    pub fn ensure_matches(&self, pack: &CeremonyEvidencePack) -> Result<(), DomainError> {
        if pack.source_id() == &self.source_id {
            Ok(())
        } else {
            Err(DomainError::InvariantViolated {
                reason: "ceremony evidence source returned a pack for another source",
            })
        }
    }
}