use crate::dto::prelude::*;
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct MemoryLedgerResponse {
pub ledger_schema_version: u32,
pub physical_format_id: u32,
pub current_generation: u64,
pub commit_recovery: MemoryCommitRecoveryResponse,
pub authorities: Vec<MemoryRangeAuthorityEntry>,
pub records: Vec<MemoryAllocationRecordEntry>,
pub generations: Vec<MemoryLedgerGenerationEntry>,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct MemoryCommitRecoveryResponse {
pub slot0: MemoryCommitSlotResponse,
pub slot1: MemoryCommitSlotResponse,
pub authoritative_generation: Option<u64>,
pub recovery_error: Option<MemoryCommitRecoveryErrorResponse>,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub struct MemoryCommitSlotResponse {
pub present: bool,
pub generation: Option<u64>,
pub valid: bool,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub enum MemoryCommitRecoveryErrorResponse {
NoValidGeneration,
AmbiguousGeneration,
GenerationOverflow,
UnexpectedGeneration,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct MemoryRangeAuthorityEntry {
pub owner: String,
pub start: u8,
pub end: u8,
pub mode: MemoryRangeAuthorityMode,
pub purpose: String,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub enum MemoryRangeAuthorityMode {
Reserved,
Allowed,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct MemoryAllocationRecordEntry {
pub memory_manager_id: Option<u8>,
pub stable_key: String,
pub state: MemoryAllocationState,
pub first_generation: u64,
pub last_seen_generation: u64,
pub retired_generation: Option<u64>,
pub schema_history: Vec<MemorySchemaMetadataEntry>,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub enum MemoryAllocationState {
Reserved,
Active,
Retired,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct MemorySchemaMetadataEntry {
pub generation: u64,
pub schema_version: Option<u32>,
pub schema_fingerprint: Option<String>,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct MemoryLedgerGenerationEntry {
pub generation: u64,
pub parent_generation: Option<u64>,
pub runtime_fingerprint: Option<String>,
pub declaration_count: u32,
pub committed_at: Option<u64>,
}