use crate::fleet_ensure::view::release::FleetReleaseFundingView;
use candid::Principal;
use canic_core::shared_support::icp_refill::{IcpRefillErrorCode, IcpRefillStatus};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum RecordedRefillCycles {
Missing,
Recorded(u128),
Overflow,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ReleaseRefillFacts {
pub transfer_uncertain: bool,
pub record_id: u64,
pub operation_id: [u8; 32],
pub status: IcpRefillStatus,
pub error_code: Option<IcpRefillErrorCode>,
pub ledger_block_index: Option<u64>,
pub cycles: RecordedRefillCycles,
pub refund_block_index: Option<u64>,
pub expired_before_block: Option<u64>,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ReleaseRefillDisposition {
NoLedgerTransfer,
RecordedConversion {
ledger_block: u64,
cycles: u128,
},
RecordedRefund {
ledger_block: u64,
refund_block: u64,
},
RefundResidualReview {
ledger_block: u64,
},
LedgerReconciliation,
CmcReconciliation {
ledger_block: u64,
},
InvalidReceipt,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ReleaseRefillAssessment {
pub record_id: u64,
pub operation_id: [u8; 32],
pub disposition: ReleaseRefillDisposition,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ReleaseRootFundingFacts {
pub root: Principal,
pub coordinator_operations: Vec<[u8; 32]>,
pub rotation_operation: Option<[u8; 32]>,
pub refills: Vec<ReleaseRefillFacts>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ReleaseRootFundingAssessment {
pub root: Principal,
pub coordinator_operations: Vec<[u8; 32]>,
pub rotation_operation: Option<[u8; 32]>,
pub refills: Vec<ReleaseRefillAssessment>,
}
#[derive(Clone, Debug)]
pub struct FleetReleaseFundingAssessment {
pub coordinator_rotation_operation: Option<[u8; 32]>,
pub evidence: FleetReleaseFundingView,
pub roots: Vec<ReleaseRootFundingAssessment>,
}