I tried the library out and it worked pretty well for me.<p>I had previously written a declarative macro to generate benchmark functions [1]. It worked, but I didn't enjoy the process of getting it working. Nor did I feel confident about making changes to it.<p>When I rewrote it using crabtime I found the experience much better. I was mostly writing Rust code now, something I was familiar with. The code is much more readable and customisable [2]. For example, instead of having to pass in the names of the modules each time I added a new one, I simply read the files from disk at compile time.<p>To compare the two see what the code looks like in within the braces of paste!{} in the first one and crabtime::output!{} in the second one. The main difference is that I can <i>construct</i> the strings using Rust code and drop them in with a simple {{ str }}. With paste!, I don't know exactly what I did, but I kept messing around until it worked.<p>Or compare the two loops. In the first one we have `($($year:ident {$($day:ident),+ $(,)?}),+ $(,)?)` while with crabtime we have plain Rust code - `for (year, day) in years_and_days`. I find the latter more readable.<p>Overall I'm quite pleased with crabtime. Earlier I'd avoid Rust metaprogramming as much as possible, but now I'd be open to writing a macro if the situation called for it.<p>[1] - <a href="https://github.com/nindalf/advent/blob/13ff13/benches/benches/bench.rs#L7" rel="nofollow">https://github.com/nindalf/advent/blob/13ff13/benches/benche...</a><p>[2] - <a href="https://github.com/nindalf/advent/blob/b72b98/benches/benches/bench.rs#L52" rel="nofollow">https://github.com/nindalf/advent/blob/b72b98/benches/benche...</a>