# Add zero-cost builder methods to PathBuf

**URL:** <https://internals.rust-lang.org/t/add-zero-cost-builder-methods-to-pathbuf/15318>\
**Category:** libs\
**Created:** [September 10, 2021, 11:22pm UTC](https://internals.rust-lang.org/t/add-zero-cost-builder-methods-to-pathbuf/15318 "2021-09-10T23:22:40Z")\
**Posts on this page:** 2\
**Page:** 2

<div class="post-metadata">

**Author:** ![Mokuz](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/mokuz/32/7225_2.png) [@Mokuz](https://internals.rust-lang.org/u/Mokuz)\
**Post date:** [September 19, 2021, 9:22am UTC](https://internals.rust-lang.org/t/add-zero-cost-builder-methods-to-pathbuf/15318/21 "2021-09-19T09:22:55Z")

</div>

```rust
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"));
}

```

---

<div class="post-metadata">

**Author:** ![system](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/system/32/14092_2.png) [@system](https://internals.rust-lang.org/u/system)\
**Post date:** [December 18, 2021, 9:23am UTC](https://internals.rust-lang.org/t/add-zero-cost-builder-methods-to-pathbuf/15318/22 "2021-12-18T09:23:51Z")

</div>

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.

[Previous page](https://internals.rust-lang.org/t/add-zero-cost-builder-methods-to-pathbuf/15318.md?page=1)
