interpolator 0.5.0

runtime format strings, fully compatible with std's macros
Documentation
format_value! {debug(out, value, Debug):
    (None, None, A::None, S::None, false, false) => write!(out, "{value:?}"),
    (None, None, A::None, S::None, false, true) => write!(out, "{value:0?}"),
    (None, None, A::None, S::Plus, false, false) => write!(out, "{value:+?}"),
    (None, None, A::None, S::Plus, false, true) => write!(out, "{value:+0?}"),
    (None, None, A::None, S::Minus, false, false) => write!(out, "{value:-?}"),
    (None, None, A::None, S::Minus, false, true) => write!(out, "{value:-0?}"),
    (None, None, A::Left, S::None, false, false) => write!(out, "{value:<?}"),
    (None, None, A::Left, S::None, false, true) => write!(out, "{value:<0?}"),
    (None, None, A::Left, S::Plus, false, false) => write!(out, "{value:<+?}"),
    (None, None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0?}"),
    (None, None, A::Left, S::Minus, false, false) => write!(out, "{value:<-?}"),
    (None, None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0?}"),
    (None, None, A::Center, S::None, false, false) => write!(out, "{value:^?}"),
    (None, None, A::Center, S::None, false, true) => write!(out, "{value:^0?}"),
    (None, None, A::Center, S::Plus, false, false) => write!(out, "{value:^+?}"),
    (None, None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0?}"),
    (None, None, A::Center, S::Minus, false, false) => write!(out, "{value:^-?}"),
    (None, None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0?}"),
    (None, None, A::Right, S::None, false, false) => write!(out, "{value:>?}"),
    (None, None, A::Right, S::None, false, true) => write!(out, "{value:>0?}"),
    (None, None, A::Right, S::Plus, false, false) => write!(out, "{value:>+?}"),
    (None, None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0?}"),
    (None, None, A::Right, S::Minus, false, false) => write!(out, "{value:>-?}"),
    (None, None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0?}"),
    (None, None, A::None, S::None, true, false) => write!(out, "{value:#?}"),
    (None, None, A::None, S::None, true, true) => write!(out, "{value:#0?}"),
    (None, None, A::None, S::Plus, true, false) => write!(out, "{value:+#?}"),
    (None, None, A::None, S::Plus, true, true) => write!(out, "{value:+#0?}"),
    (None, None, A::None, S::Minus, true, false) => write!(out, "{value:-#?}"),
    (None, None, A::None, S::Minus, true, true) => write!(out, "{value:-#0?}"),
    (None, None, A::Left, S::None, true, false) => write!(out, "{value:<#?}"),
    (None, None, A::Left, S::None, true, true) => write!(out, "{value:<#0?}"),
    (None, None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#?}"),
    (None, None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0?}"),
    (None, None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#?}"),
    (None, None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0?}"),
    (None, None, A::Center, S::None, true, false) => write!(out, "{value:^#?}"),
    (None, None, A::Center, S::None, true, true) => write!(out, "{value:^#0?}"),
    (None, None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#?}"),
    (None, None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0?}"),
    (None, None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#?}"),
    (None, None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0?}"),
    (None, None, A::Right, S::None, true, false) => write!(out, "{value:>#?}"),
    (None, None, A::Right, S::None, true, true) => write!(out, "{value:>#0?}"),
    (None, None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#?}"),
    (None, None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0?}"),
    (None, None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#?}"),
    (None, None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0?}"),
    (None, Some(pr), A::None, S::None, false, false) => write!(out, "{value:.pr$?}"),
    (None, Some(pr), A::None, S::None, false, true) => write!(out, "{value:0.pr$?}"),
    (None, Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+.pr$?}"),
    (None, Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0.pr$?}"),
    (None, Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-.pr$?}"),
    (None, Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0.pr$?}"),
    (None, Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<.pr$?}"),
    (None, Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0.pr$?}"),
    (None, Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+.pr$?}"),
    (None, Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0.pr$?}"),
    (None, Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-.pr$?}"),
    (None, Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0.pr$?}"),
    (None, Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^.pr$?}"),
    (None, Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0.pr$?}"),
    (None, Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+.pr$?}"),
    (None, Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0.pr$?}"),
    (None, Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-.pr$?}"),
    (None, Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0.pr$?}"),
    (None, Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>.pr$?}"),
    (None, Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0.pr$?}"),
    (None, Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+.pr$?}"),
    (None, Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0.pr$?}"),
    (None, Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-.pr$?}"),
    (None, Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0.pr$?}"),
    (None, Some(pr), A::None, S::None, true, false) => write!(out, "{value:#.pr$?}"),
    (None, Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0.pr$?}"),
    (None, Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#.pr$?}"),
    (None, Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0.pr$?}"),
    (None, Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#.pr$?}"),
    (None, Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0.pr$?}"),
    (None, Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#.pr$?}"),
    (None, Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0.pr$?}"),
    (None, Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#.pr$?}"),
    (None, Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0.pr$?}"),
    (None, Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#.pr$?}"),
    (None, Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0.pr$?}"),
    (None, Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#.pr$?}"),
    (None, Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0.pr$?}"),
    (None, Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#.pr$?}"),
    (None, Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0.pr$?}"),
    (None, Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#.pr$?}"),
    (None, Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0.pr$?}"),
    (None, Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#.pr$?}"),
    (None, Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0.pr$?}"),
    (None, Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#.pr$?}"),
    (None, Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0.pr$?}"),
    (None, Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#.pr$?}"),
    (None, Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0.pr$?}"),
    (Some(wi), None, A::None, S::None, false, false) => write!(out, "{value:wi$?}"),
    (Some(wi), None, A::None, S::None, false, true) => write!(out, "{value:0wi$?}"),
    (Some(wi), None, A::None, S::Plus, false, false) => write!(out, "{value:+wi$?}"),
    (Some(wi), None, A::None, S::Plus, false, true) => write!(out, "{value:+0wi$?}"),
    (Some(wi), None, A::None, S::Minus, false, false) => write!(out, "{value:-wi$?}"),
    (Some(wi), None, A::None, S::Minus, false, true) => write!(out, "{value:-0wi$?}"),
    (Some(wi), None, A::Left, S::None, false, false) => write!(out, "{value:<wi$?}"),
    (Some(wi), None, A::Left, S::None, false, true) => write!(out, "{value:<0wi$?}"),
    (Some(wi), None, A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$?}"),
    (Some(wi), None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$?}"),
    (Some(wi), None, A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$?}"),
    (Some(wi), None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$?}"),
    (Some(wi), None, A::Center, S::None, false, false) => write!(out, "{value:^wi$?}"),
    (Some(wi), None, A::Center, S::None, false, true) => write!(out, "{value:^0wi$?}"),
    (Some(wi), None, A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$?}"),
    (Some(wi), None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$?}"),
    (Some(wi), None, A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$?}"),
    (Some(wi), None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$?}"),
    (Some(wi), None, A::Right, S::None, false, false) => write!(out, "{value:>wi$?}"),
    (Some(wi), None, A::Right, S::None, false, true) => write!(out, "{value:>0wi$?}"),
    (Some(wi), None, A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$?}"),
    (Some(wi), None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$?}"),
    (Some(wi), None, A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$?}"),
    (Some(wi), None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$?}"),
    (Some(wi), None, A::None, S::None, true, false) => write!(out, "{value:#wi$?}"),
    (Some(wi), None, A::None, S::None, true, true) => write!(out, "{value:#0wi$?}"),
    (Some(wi), None, A::None, S::Plus, true, false) => write!(out, "{value:+#wi$?}"),
    (Some(wi), None, A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$?}"),
    (Some(wi), None, A::None, S::Minus, true, false) => write!(out, "{value:-#wi$?}"),
    (Some(wi), None, A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$?}"),
    (Some(wi), None, A::Left, S::None, true, false) => write!(out, "{value:<#wi$?}"),
    (Some(wi), None, A::Left, S::None, true, true) => write!(out, "{value:<#0wi$?}"),
    (Some(wi), None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$?}"),
    (Some(wi), None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$?}"),
    (Some(wi), None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$?}"),
    (Some(wi), None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$?}"),
    (Some(wi), None, A::Center, S::None, true, false) => write!(out, "{value:^#wi$?}"),
    (Some(wi), None, A::Center, S::None, true, true) => write!(out, "{value:^#0wi$?}"),
    (Some(wi), None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$?}"),
    (Some(wi), None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$?}"),
    (Some(wi), None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$?}"),
    (Some(wi), None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$?}"),
    (Some(wi), None, A::Right, S::None, true, false) => write!(out, "{value:>#wi$?}"),
    (Some(wi), None, A::Right, S::None, true, true) => write!(out, "{value:>#0wi$?}"),
    (Some(wi), None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$?}"),
    (Some(wi), None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$?}"),
    (Some(wi), None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$?}"),
    (Some(wi), None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$?}"),
    (Some(wi), Some(pr), A::None, S::None, false, false) => write!(out, "{value:wi$.pr$?}"),
    (Some(wi), Some(pr), A::None, S::None, false, true) => write!(out, "{value:0wi$.pr$?}"),
    (Some(wi), Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+wi$.pr$?}"),
    (Some(wi), Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0wi$.pr$?}"),
    (Some(wi), Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-wi$.pr$?}"),
    (Some(wi), Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<wi$.pr$?}"),
    (Some(wi), Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$.pr$?}"),
    (Some(wi), Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$.pr$?}"),
    (Some(wi), Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^wi$.pr$?}"),
    (Some(wi), Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$.pr$?}"),
    (Some(wi), Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$.pr$?}"),
    (Some(wi), Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>wi$.pr$?}"),
    (Some(wi), Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$.pr$?}"),
    (Some(wi), Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$.pr$?}"),
    (Some(wi), Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$.pr$?}"),
    (Some(wi), Some(pr), A::None, S::None, true, false) => write!(out, "{value:#wi$.pr$?}"),
    (Some(wi), Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0wi$.pr$?}"),
    (Some(wi), Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#wi$.pr$?}"),
    (Some(wi), Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$.pr$?}"),
    (Some(wi), Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#wi$.pr$?}"),
    (Some(wi), Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#wi$.pr$?}"),
    (Some(wi), Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$.pr$?}"),
    (Some(wi), Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$.pr$?}"),
    (Some(wi), Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#wi$.pr$?}"),
    (Some(wi), Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$.pr$?}"),
    (Some(wi), Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$.pr$?}"),
    (Some(wi), Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#wi$.pr$?}"),
    (Some(wi), Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$.pr$?}"),
    (Some(wi), Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$.pr$?}"),
    (Some(wi), Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$.pr$?}"),
    (Some(wi), Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$.pr$?}"),
}