malvin 0.2.6

Non-interactive research and coding agent
use std::path::PathBuf;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DotfileBackupPayload {
    pub backup_path: PathBuf,
    pub bytes: Vec<u8>,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DotfileBackupState {
    Missing,
    Present(DotfileBackupPayload),
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DotfileBackupStateRef<'a> {
    Missing,
    Present(&'a DotfileBackupPayload),
}

impl DotfileBackupState {
    #[must_use]
    pub const fn as_slot_state(&self) -> DotfileBackupStateRef<'_> {
        match self {
            Self::Missing => slot_state_ref(None),
            Self::Present(payload) => slot_state_ref(Some(payload)),
        }
    }
}

pub(super) const fn slot_state_ref(payload: Option<&DotfileBackupPayload>) -> DotfileBackupStateRef<'_> {
    match payload {
        None => DotfileBackupStateRef::Missing,
        Some(payload) => DotfileBackupStateRef::Present(payload),
    }
}