use crate::entry::DirectoryEntry;
use crate::error::EnumerationError;
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct EnumerationId(u64);
impl EnumerationId {
#[must_use]
pub const fn from_raw(value: u64) -> Self {
Self(value)
}
#[must_use]
pub const fn get(self) -> u64 {
self.0
}
}
impl std::fmt::Display for EnumerationId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "enumeration {}", self.0)
}
}
#[derive(Debug)]
pub enum TerminalOutcome {
Completed,
Cancelled,
Failed(EnumerationError),
}
impl TerminalOutcome {
#[must_use]
pub const fn is_completed(&self) -> bool {
matches!(self, TerminalOutcome::Completed)
}
#[must_use]
pub const fn failure(&self) -> Option<&EnumerationError> {
match self {
TerminalOutcome::Failed(error) => Some(error),
_ => None,
}
}
}
#[derive(Debug)]
pub enum Completion {
Entry {
enumeration: EnumerationId,
entry: DirectoryEntry,
},
Terminal {
enumeration: EnumerationId,
outcome: TerminalOutcome,
},
}
impl Completion {
#[must_use]
pub const fn enumeration(&self) -> EnumerationId {
match self {
Completion::Entry { enumeration, .. } | Completion::Terminal { enumeration, .. } => {
*enumeration
}
}
}
#[must_use]
pub const fn is_terminal(&self) -> bool {
matches!(self, Completion::Terminal { .. })
}
}
#[cfg(test)]
mod tests;