use super::machine::State;
use crate::sandbox::SandboxState;
use crate::sandbox::record::PersistPhase;
impl State {
pub(super) fn to_public(self) -> SandboxState {
match self {
Self::Provisioning {}
| Self::Staging {}
| Self::Booting {}
| Self::Restoring { .. }
| Self::Resuming {} => SandboxState::Starting,
Self::Gating { claimed: false, .. } => SandboxState::Starting,
Self::Gating { claimed: true, .. } => SandboxState::Running,
Self::Ready {} | Self::Checkpointing {} => SandboxState::Ready,
Self::Running {} => SandboxState::Running,
Self::Capturing {} | Self::Releasing {} => SandboxState::Pausing,
Self::Paused {} => SandboxState::Paused,
Self::Stopping {} | Self::Removing {} => SandboxState::Stopping,
Self::Detached {} => SandboxState::Ready,
Self::Stopped {} | Self::Gone {} => SandboxState::Stopped,
Self::Failed {} => SandboxState::Failed,
}
}
pub(super) fn durable(self) -> Option<PersistPhase> {
match self {
Self::Provisioning {} | Self::Restoring { .. } => Some(PersistPhase::Creating),
Self::Staging {} | Self::Booting {} => Some(PersistPhase::Starting),
Self::Gating { committed, .. } => Some(if committed {
PersistPhase::Ready
} else {
PersistPhase::Starting
}),
Self::Gone {} => None,
Self::Ready {} | Self::Running {} | Self::Checkpointing {} | Self::Detached {} => {
Some(PersistPhase::Ready)
}
Self::Capturing {} | Self::Releasing {} => Some(PersistPhase::Pausing),
Self::Paused {} => Some(PersistPhase::Paused),
Self::Resuming {} => Some(PersistPhase::Resuming),
Self::Stopping {} => Some(PersistPhase::Stopping),
Self::Stopped {} => Some(PersistPhase::Stopped),
Self::Failed {} => Some(PersistPhase::Failed),
Self::Removing {} => Some(PersistPhase::Removing),
}
}
}