use boxlite_shared::errors::{BoxliteError, BoxliteResult};
pub(crate) const OPAQUE_MARKER: &str = ".wh..wh..opq";
const PREFIX: &str = ".wh.";
pub(crate) enum Whiteout<'a> {
Opaque,
Remove(&'a str),
}
pub(crate) fn classify(base: &str) -> BoxliteResult<Option<Whiteout<'_>>> {
if base == OPAQUE_MARKER {
return Ok(Some(Whiteout::Opaque));
}
let Some(target) = base.strip_prefix(PREFIX) else {
return Ok(None);
};
if target.is_empty() || target == "." || target == ".." {
return Err(BoxliteError::Storage(format!(
"Invalid whiteout name: {}",
base
)));
}
Ok(Some(Whiteout::Remove(target)))
}