diff options
| author | A Farzat <a@farzat.xyz> | 2026-06-02 12:56:41 +0300 |
|---|---|---|
| committer | A Farzat <a@farzat.xyz> | 2026-06-02 12:56:41 +0300 |
| commit | 9dc2499bcdaa961a42ccee59025d6d52a296bbdf (patch) | |
| tree | 625b2fb5e0613e7ff2a8b9d2c11812d72572e1e6 | |
| parent | ab96459166b866c91dce7295f00efd9e4958d1df (diff) | |
| download | repo2markdown-9dc2499bcdaa961a42ccee59025d6d52a296bbdf.tar.gz repo2markdown-9dc2499bcdaa961a42ccee59025d6d52a296bbdf.zip | |
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.
| -rw-r--r-- | src/lib.rs | 43 |
1 files changed, 43 insertions, 0 deletions
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<PathBuf, NormalizeError> { + 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")); + } +} |
