macro_rules! coerce_fmt {
    ($reff:expr) => { ... };
}Expand description
Coerces $reff to a type that has a to_panicvals method,
which is expected to return a [PanicVal<'_>; LEN].
§Limitations
Arguments to the formatting/panicking macros must have a fully inferred concrete type,
because const_panic macros use duck typing to call methods on those arguments.
One effect of that limitation is that you will have to pass suffixed
integer literals (eg: 100u8) when those integers aren’t inferred to be a concrete type.
§Example
This example uses const_panic::ArrayString
to show what the values format into,
which requires the "non_basic" crate feature (enabled by default).
ⓘ
use const_panic::{ArrayString, FmtArg, IsCustomType, PanicFmt, PanicVal, coerce_fmt};
type AS = ArrayString<100>;
assert_eq!(
    AS::from_panicvals(&coerce_fmt!(100u8).to_panicvals(FmtArg::DEBUG)).unwrap(),
    "100",
);
assert_eq!(
    AS::from_panicvals(&coerce_fmt!("hello\n").to_panicvals(FmtArg::DEBUG)).unwrap(),
    r#""hello\n""#,
);
assert_eq!(
    AS::from_panicvals(&coerce_fmt!(IsReal::No).to_panicvals(FmtArg::DEBUG)).unwrap(),
    "No",
);
assert_eq!(
    AS::from_panicvals(&coerce_fmt!(IsReal::Yes).to_panicvals(FmtArg::DEBUG)).unwrap(),
    "Yes",
);
enum IsReal{Yes, No}
// All the code below manually implements panic formatting for a field-less enum.
// This can be written concisely with the `PanicFmt` derive or `impl_panicfmt` macro.
impl PanicFmt for IsReal {
    type This = Self;
    type Kind = IsCustomType;
    const PV_COUNT: usize = 1;
}
impl IsReal {
    pub const fn to_panicvals(&self, _f: FmtArg) -> [PanicVal<'_>; IsReal::PV_COUNT] {
        let x = match self {
            Self::Yes => "Yes",
            Self::No => "No",
        };
        [PanicVal::write_str(x)]
    }
}