How can I use a dynamic format string with the format! macro?

Short answer: it cannot be done.


Long answer: the format! macro (and its derivatives) requires a string literal, that is a string known at compilation-time. In exchange for this requirement, if the arguments provided do not match the format, a compilation error is raised.


What you are looking for is known as a template engine. A non-exhaustive list of Rust template engines in no particular order:

  • Handlebars
  • Rustache
  • Maud
  • Horrorshow
  • fomat-macros
  • ...

Template engines have different characteristics, and notably differ by the degree of validation occurring at compile-time or run-time and their flexibility (I seem to recall that Maud was very HTML-centric, for example). It's up to you to find the one most fitting for your use case.


Check out the strfmt library, it is the closest I've found to do dynamic string formatting.