use crate::ids::{ComponentBinding, FleetRegistryAuthority, ManagedCanisterBinding};
use candid::{CandidType, Principal};
use serde::{Deserialize, Serialize};
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct CallerInstallation {
pub binding: ManagedCanisterBinding,
pub install_id: [u8; 32],
pub component_install_id: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct CallerComponentInstallation {
pub binding: ComponentBinding,
pub install_id: [u8; 32],
}
impl CallerInstallation {
#[must_use]
pub const fn canister(&self) -> Principal {
match &self.binding {
ManagedCanisterBinding::Component(binding) => binding.canister_id,
ManagedCanisterBinding::ComponentChild(binding) => binding.canister_id,
}
}
#[must_use]
pub const fn component(&self) -> &ComponentBinding {
match &self.binding {
ManagedCanisterBinding::Component(binding) => binding,
ManagedCanisterBinding::ComponentChild(binding) => &binding.component,
}
}
#[must_use]
pub const fn role(&self) -> &crate::ids::CanisterRole {
match &self.binding {
ManagedCanisterBinding::Component(binding) => &binding.role,
ManagedCanisterBinding::ComponentChild(binding) => &binding.role,
}
}
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct CallerRootAuthority {
pub registry: FleetRegistryAuthority,
pub root: Principal,
pub install_id: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct CallerReceiverAuthority {
pub receiver: CallerInstallation,
pub issuer: CallerRootAuthority,
pub policy_digest: [u8; 32],
}