use std::sync::Arc;
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum StartupPhase {
PreparingSnapshot,
WaitingForMemoryBacking,
PreparingMemoryBacking,
ReusingMemoryBacking,
SyncingMemoryBacking,
Activating,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct StartupProgress {
pub phase: StartupPhase,
pub completed_bytes: u64,
pub total_bytes: Option<u64>,
}
pub type StartupProgressCallback = Arc<dyn Fn(StartupProgress) + Send + Sync>;
impl StartupProgress {
pub fn phase(phase: StartupPhase) -> Self {
Self {
phase,
completed_bytes: 0,
total_bytes: None,
}
}
}
impl StartupPhase {
pub const fn as_str(self) -> &'static str {
match self {
Self::PreparingSnapshot => "preparing_snapshot",
Self::WaitingForMemoryBacking => "waiting_for_memory_backing",
Self::PreparingMemoryBacking => "preparing_memory_backing",
Self::ReusingMemoryBacking => "reusing_memory_backing",
Self::SyncingMemoryBacking => "syncing_memory_backing",
Self::Activating => "activating",
}
}
}