From 9dc2499bcdaa961a42ccee59025d6d52a296bbdf Mon Sep 17 00:00:00 2001 From: A Farzat Date: Tue, 2 Jun 2026 12:56:41 +0300 Subject: Start by normalizing user input filenames The filenames displayed in the output markdown should be consistent, regardless of the way they were input to the program (absolute, relative). They should always be relative to the project root. --- src/lib.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/lib.rs diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..0d7a010 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,43 @@ +use std::path::{Path, PathBuf}; + +#[derive(Debug)] +pub enum NormalizeError { + EmptyInput, +} + +pub fn normalize_path( + _root: &Path, + _origin: &Path, + input: &Path, +) -> Result { + if input.as_os_str().is_empty() { + return Err(NormalizeError::EmptyInput); + } + Ok(input.to_path_buf()) +} + +#[cfg(test)] +mod tests { + use std::path::Path; + + use super::{NormalizeError, normalize_path}; + + #[test] + fn empty_path_returns_error() { + let root = Path::new("/project"); + let origin_dir = Path::new("/project"); + let input = Path::new(""); + let result = normalize_path(root, origin_dir, input); + assert!(matches!(result, Err(NormalizeError::EmptyInput))); + } + + #[test] + fn plain_filename_with_root_at_cwd_returns_filename() { + let root = Path::new("/project"); + let origin_dir = Path::new("/project"); + let input = Path::new("main.rs"); + let result = normalize_path(root, origin_dir, input); + assert!(result.is_ok()); + assert_eq!(result.unwrap(), Path::new("main.rs")); + } +} -- cgit v1.3.1