If the struct has more than three fields,
pattern matching in the function head is to be copy-pasted over the whole module or extracted into a cryptic macro.
Yeah, I tend to use the shorter_maps library for that but even it can still get very long and the formatter breaks things up very weird at times… >.>
Even then, although, it quickly becomes hardly maintainable due to unused variables warnings thrown whenever one calls the all-in-one macro and does not use all the variables injected.
You can just do quote generated: true do
to silence most warnings (though not variable unused I think?), or in that case can transform the body to add hoisted versions. Even then that won’t work if you need to pass in 2 of that struct in the same head. 
I needed a monadic behaviour there (once any call in the pipe failed, I want the rest transformations to be skipped and the error immediately returned back.)
You really should look at all of expede’s packages on hex.pm. I use a few of them pretty excessively… >.>
guards: %{check_bar: "is_map(bar)"}}]
And reason this is a string instead of just:
guards: %{check_bar: is_map(bar)}}]
Since the use
can be a macro anyway, so it can read it straight? 
Looks like an interesting library overall though. 