use bcx_core::{CapabilityRef, EventId, PolicyEpoch, ValidationError};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum RelationshipKind {
CausedBy,
DelegatedFrom,
RetryOf,
ScheduledBy,
DerivedFrom,
JoinedFrom,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum CauseKind {
ExternalRequest,
ExplicitUserAction,
ApplicationAction,
DelegatedServiceCall,
Timer,
QueueMessage,
Retry,
Administrator,
AutonomousAgent,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum OperationAction {
Read,
Create,
Update,
Delete,
Derive,
Execute,
Transfer,
Subscribe,
Publish,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum AdmissionResult {
Allow,
Deny,
Narrow,
RequireApproval,
Quarantine,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum EffectResult {
Completed,
Partial,
Rejected,
Failed,
Cancelled,
TimedOut,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct CauseCapsule<'a> {
pub event_id: EventId,
pub parents: &'a [EventId],
pub relationship: RelationshipKind,
pub cause_kind: CauseKind,
pub action: OperationAction,
pub authority: Option<CapabilityRef>,
pub policy_epoch: Option<PolicyEpoch>,
}
impl CauseCapsule<'_> {
pub const fn validate(&self, maximum_parents: usize) -> Result<(), ValidationError> {
if self.parents.len() > maximum_parents {
Err(ValidationError::TooLarge)
} else {
Ok(())
}
}
}