37 releases (20 breaking)
| 0.21.1 | Apr 30, 2026 |
|---|---|
| 0.20.0 | Apr 24, 2026 |
| 0.19.2 | Mar 22, 2026 |
| 0.18.1 | Dec 31, 2025 |
| 0.4.1 | Jul 22, 2023 |
#896 in Filesystem
2,437,056 downloads per month
Used in 714 crates
(14 directly)
280KB
5K
SLoC
A crate with file-system specific utilities.
Examples
use std::path::{Path, PathBuf};
use gix_fs::{
stack::{Delegate, ToNormalPathComponents},
Stack,
};
let components = "src/lib.rs"
.to_normal_path_components()
.collect::<Result<Vec<_>, _>>()?;
assert_eq!(
components
.into_iter()
.map(|component| component.to_string_lossy().into_owned())
.collect::<Vec<_>>(),
vec!["src", "lib.rs"]
);
#[derive(Default)]
struct Recorder {
directories: Vec<PathBuf>,
paths: Vec<PathBuf>,
}
impl Delegate for Recorder {
fn push_directory(&mut self, stack: &Stack) -> std::io::Result<()> {
self.directories.push(stack.current_relative().to_path_buf());
Ok(())
}
fn push(&mut self, _is_last_component: bool, stack: &Stack) -> std::io::Result<()> {
self.paths.push(stack.current_relative().to_path_buf());
Ok(())
}
fn pop_directory(&mut self) {}
}
let capabilities = gix_fs::Capabilities::probe_dir(dir.path());
let mut stack = Stack::new(dir.path().to_path_buf());
let mut recorder = Recorder::default();
stack.make_relative_path_current("src/lib.rs", &mut recorder)?;
assert_eq!(stack.current_relative(), Path::new("src/lib.rs"));
assert_eq!(recorder.directories[0], Path::new(""));
assert_eq!(recorder.paths, vec![PathBuf::from("src"), PathBuf::from("src/lib.rs")]);
assert_eq!(gix_fs::current_dir(capabilities.precompose_unicode)?, std::env::current_dir()?);
Dependencies
~1.5–2.3MB
~55K SLoC