From 039d37c677e05a54f1e29b2da26eb2ea69ef521d Mon Sep 17 00:00:00 2001 From: itowlson Date: Thu, 1 Aug 2024 08:44:39 +1200 Subject: [PATCH] Fix inferred dep path losing patch version Signed-off-by: itowlson --- crates/wac-resolver/src/fs.rs | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/crates/wac-resolver/src/fs.rs b/crates/wac-resolver/src/fs.rs index d9ad1b3..6e5c1dc 100644 --- a/crates/wac-resolver/src/fs.rs +++ b/crates/wac-resolver/src/fs.rs @@ -61,7 +61,7 @@ impl FileSystemPackageResolver { // If the path is not a directory, use a `.wasm` or `.wat` extension if !path.is_dir() { - path.set_extension("wasm"); + append_extension(&mut path, "wasm"); #[cfg(feature = "wat")] { @@ -176,3 +176,30 @@ impl Default for FileSystemPackageResolver { Self::new("deps", Default::default(), true) } } + +/// Similar to Path::set_extension except it always appends. +/// For example "0.0.1" -> "0.0.1.wasm" (instead of to "0.0.wasm"). +fn append_extension(path: &mut PathBuf, extension: &str) { + let os_str = path.as_mut_os_string(); + os_str.push("."); + os_str.push(extension) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn append_extension_if_no_existing_extension() { + let mut path = PathBuf::from("a/b/c"); + append_extension(&mut path, "txt"); + assert_eq!("a/b/c.txt", path.display().to_string()); + } + + #[test] + fn append_extension_if_existing_extension() { + let mut path = PathBuf::from("a/b/0.0.1"); + append_extension(&mut path, "wasm"); + assert_eq!("a/b/0.0.1.wasm", path.display().to_string()); + } +}