use std::ffi::OsStr;
use std::path::{Path, PathBuf};
pub(super) fn lock_path_for(state_path: &Path) -> PathBuf {
let mut lock_name = state_path
.file_name()
.map(OsStr::to_os_string)
.unwrap_or_default();
lock_name.push(".lock");
state_path.with_file_name(lock_name)
}
#[cfg(test)]
#[allow(
clippy::unwrap_used,
clippy::panic,
reason = "test code: unwrap and panic on unexpected variant are the standard test diagnostics"
)]
mod tests {
use std::path::{Path, PathBuf};
use super::lock_path_for;
#[test]
fn lock_path_for_appends_lock_suffix() {
assert_eq!(
lock_path_for(Path::new("/a/b/state.json")),
PathBuf::from("/a/b/state.json.lock"),
);
}
#[test]
fn lock_path_for_handles_paths_without_extension() {
assert_eq!(
lock_path_for(Path::new("/a/b/state")),
PathBuf::from("/a/b/state.lock"),
);
}
#[test]
fn lock_path_for_handles_bare_filename() {
assert_eq!(
lock_path_for(Path::new("state.json")),
PathBuf::from("state.json.lock"),
);
}
}