#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum KernelOperation {
FsRemove,
FsOverwrite,
FsRename,
TrashEmpty,
}
impl KernelOperation {
pub const fn as_str(self) -> &'static str {
match self {
Self::FsRemove => "fs.remove",
Self::FsOverwrite => "fs.overwrite",
Self::FsRename => "fs.rename",
Self::TrashEmpty => "trash.empty",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn every_operation_has_a_dotted_two_part_id() {
for op in [
KernelOperation::FsRemove,
KernelOperation::FsOverwrite,
KernelOperation::FsRename,
KernelOperation::TrashEmpty,
] {
let id = op.as_str();
let parts: Vec<&str> = id.split('.').collect();
assert_eq!(parts.len(), 2, "{id} must be `namespace.verb`");
assert!(
parts.iter().all(|p| !p.is_empty()),
"{id} has an empty half"
);
}
}
#[test]
fn ids_are_distinct() {
let ids = [
KernelOperation::FsRemove.as_str(),
KernelOperation::FsOverwrite.as_str(),
KernelOperation::FsRename.as_str(),
KernelOperation::TrashEmpty.as_str(),
];
let unique: std::collections::BTreeSet<_> = ids.iter().collect();
assert_eq!(unique.len(), ids.len(), "two operations share a dotted id");
}
}