#relative-path #directory #root #compile-time #project #cargo-manifest-dir

macro no-std manifest-dir-macros

This crate provides function-like macros to check or operate paths relative to CARGO_MANIFEST_DIR at compile time

15 releases

0.1.18 Sep 9, 2023
0.1.17 Apr 18, 2023
0.1.16 May 8, 2022
0.1.14 Mar 17, 2022
0.1.11 May 5, 2021

#2531 in Rust patterns

Download history 1943/week @ 2024-01-05 2087/week @ 2024-01-12 1935/week @ 2024-01-19 2064/week @ 2024-01-26 1834/week @ 2024-02-02 2587/week @ 2024-02-09 2663/week @ 2024-02-16 2106/week @ 2024-02-23 2611/week @ 2024-03-01 3415/week @ 2024-03-08 2433/week @ 2024-03-15 2057/week @ 2024-03-22 1812/week @ 2024-03-29 1575/week @ 2024-04-05 1803/week @ 2024-04-12 1277/week @ 2024-04-19

6,760 downloads per month
Used in 28 crates (12 directly)

MIT license

28KB
511 lines

Manifest Dir Macros

CI

This crate provides function-like macros to check or operate paths relative to CARGO_MANIFEST_DIR at compile time.

Examples

#[macro_use] extern crate manifest_dir_macros;

println!(path!("Cargo.toml"));
println!(path!("src/lib.rs"));
println!(path!("src", "lib.rs"));
println!(path!("src", "lib.rs", "/bin"));
println!(path!("/usr"));

println!(exist_path!("Cargo.toml"));
println!(directory_path!("src"));
println!(not_directory_path!("Cargo.toml"));
println!(file_path!("Cargo.toml"));

println!(relative_path!("Cargo.toml"));
println!(directory_relative_path!("src"));
println!(not_directory_relative_path!("Cargo.toml"));
println!(file_relative_path!("Cargo.toml"));

println!(get_file_name!("src/lib.rs"));
println!(get_file_name!(default = "main.rs", "/"));
println!(get_file_stem!("src/lib.rs"));
println!(get_file_stem!(default = "lib", "/"));
println!(get_extension!("src/lib.rs"));
println!(get_extension!(default = "rs", "src/lib"));
println!(get_parent!("src/lib.rs"));
println!(get_parent!(default = "/home", "/"));

#[cfg(feature = "mime_guess")]
{
    println!(mime_guess!("src/lib.rs"));
    println!(mime_guess!(default = "application/octet-stream", "Cargo.lock"));
}

// The `tuple` feature lets these macros above support to input nested literal string tuples, which is useful when you want to use these macros inside a `macro_rule!` macro and concatenate with other literal strings.
// `$x:expr` matchers can be used in these macros thus.
#[cfg(feature = "tuple")]
{
    println!(path!(("foo",)));
    println!(path!(("foo", "bar")));
    println!(path!("a", ("foo", "bar")));
    println!(path!(("foo", "bar"), "a"));
    println!(path!(("foo", "bar"), ("a", "b")));
    println!(path!(("foo", "bar", ("a", "b")), ("c", "d")));
}

Crates.io

https://crates.io/crates/manifest-dir-macros

Documentation

https://docs.rs/manifest-dir-macros

License

MIT

Dependencies

~0.4–0.9MB
~20K SLoC