use std::path::PathBuf;
macro_rules! _path_parse_segment {
/*
LITERAL
*/
($buffer:expr; $($segment:tt)~* / $($rest:tt)*) => {{
_path_parse_segment!($buffer; $($segment)~*);
_path_parse_segment!($buffer; $($rest)*);
}};
($buffer:expr; $($segment:tt)~*) => {{
let mut segment = String::new();
$(
segment.push_str($segment);
)*
PathBuf::push($buffer, &*segment);
}};
}
macro_rules! path {
($($t:tt)*) => {{
let mut buffer = PathBuf::new();
_path_parse_segment!(&mut buffer; $($t)*);
buffer
}}
}
fn user() -> &'static str {
"Mokuz"
}
fn main() {
let q = "quux";
let p = path!("a" ~ q / "foo" / "." ~ (user()) / "file.txt" );
assert_eq!(p, PathBuf::from("aquux/foo/.Mokuz/file.txt"));
}
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.