use std::path::Path;
pub(crate) enum Cwd<'a> {
In(&'a Path),
Detached,
}
impl<'a> Cwd<'a> {
pub(crate) fn resolve(&self, neutral: &'a Path) -> &'a Path {
match self {
Cwd::In(dir) => dir,
Cwd::Detached => neutral,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::path::PathBuf;
#[test]
fn detached_resolves_to_the_neutral_dir_never_the_process_cwd() {
let neutral = PathBuf::from("/neutral/existing/dir");
assert_eq!(Cwd::Detached.resolve(&neutral), neutral.as_path());
}
#[test]
fn in_resolves_to_its_own_path_ignoring_the_neutral_dir() {
let neutral = PathBuf::from("/neutral/existing/dir");
let work = PathBuf::from("/some/worktree");
assert_eq!(Cwd::In(&work).resolve(&neutral), work.as_path());
}
}