#file-path #absolute #resolution

file_paths

Work with flexible file paths

4 releases (1 stable)

1.0.0 Oct 22, 2023
0.1.2 Aug 5, 2023
0.1.1 Aug 5, 2023
0.1.0 Aug 5, 2023

#6 in #absolute

Download history 8/week @ 2024-07-08 26/week @ 2024-07-15 10/week @ 2024-07-22 16/week @ 2024-07-29 15/week @ 2024-08-05 13/week @ 2024-08-12 12/week @ 2024-08-19 37/week @ 2024-08-26 3/week @ 2024-09-02 10/week @ 2024-09-09 9/week @ 2024-09-16 28/week @ 2024-09-23 13/week @ 2024-09-30 7/week @ 2024-10-07 16/week @ 2024-10-14

64 downloads per month
Used in 7 crates

ISC license

24KB
353 lines

File Paths

Work with textual file paths, including relativity and resolution. Features:

  • Variant: FlexPath methods consider absolute paths according to the path's FlexPathVariant. Two variants are supported: Common and Windows. The native variant can be deduced directly through _native suffixed methods.

Requirements:

  • The Rust standard library (std).

Example

use file_paths::FlexPath;

assert_eq!("a", FlexPath::new_common("a/b").resolve("..").to_string());
assert_eq!("a", FlexPath::new_common("a/b/..").to_string());
assert_eq!("a/b/c/d/e", FlexPath::from_n_common(["a/b", "c/d", "e/f", ".."]).to_string());
assert_eq!("../../c/d", FlexPath::new_common("/a/b").relative("/c/d"))

lib.rs:

Work with file paths by text only.

In the Windows operating system, absolute paths may either start with a drive letter followed by a colon or an UNC path prefix (\\). Therefore, this crate provides a FlexPath that is based on a variant ([FlexPathVariant]), which you don't need to always specify. This variant indicates whether to interpret Windows absolute paths or not.

There are two FlexPathVariant variants currently:

  • Common
  • Windows

The constant FlexPathVariant::NATIVE is one of these variants based on the target platform. For the Windows operating system, it is always Windows. For other platforms, it's always Common.

Example

use file_paths::FlexPath;

assert_eq!("a", FlexPath::new_common("a/b").resolve("..").to_string());
assert_eq!("a", FlexPath::new_common("a/b/..").to_string());
assert_eq!("a/b/c/d/e", FlexPath::from_n_common(["a/b", "c/d", "e/f", ".."]).to_string());
assert_eq!("../../c/d", FlexPath::new_common("/a/b").relative("/c/d"));

Dependencies

~2.5–4MB
~72K SLoC