use crate::{
dto::prelude::*,
ids::{CallerComponentInstallation, CallerInstallation, CallerReceiverAuthority},
};
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub enum CallerAuthorityChange {
StageSource(CallerInstallation),
Grant(CallerInstallation),
DenySource(CallerInstallation),
DenyComponent(CallerComponentInstallation),
OpenReceiver,
RetireReceiver,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct CallerAuthorityPublication {
pub operation_id: [u8; 32],
pub authority: CallerReceiverAuthority,
pub previous_generation: u64,
pub generation: u64,
pub change: CallerAuthorityChange,
pub content_hash: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub enum CallerAuthorityCommand {
Prepare(CallerAuthorityPublication),
Commit(CallerAuthorityPublication),
Complete(CallerAuthorityPublication),
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub enum CallerAuthorityPhase {
Prepared,
Committed,
Complete,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct CallerAuthorityReceipt {
pub publication: CallerAuthorityPublication,
pub phase: CallerAuthorityPhase,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct CallerAuthorityStatus {
pub readiness: CallerAuthorityReadiness,
pub authority: CallerReceiverAuthority,
pub generation: u64,
pub open: bool,
pub retired: bool,
pub entries: u32,
pub reserved_bytes: u32,
pub pending_operation: Option<[u8; 32]>,
pub receipt: Option<CallerAuthorityReceipt>,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub enum CallerAuthorityReadiness {
FrameworkPending,
FrameworkReady,
ApplicationReady,
}