pub trait PanicFmt {
    type This: ?Sized;
    type Kind;
    const PV_COUNT: usize;
    const PROOF: IsPanicFmt<Self, Self::This, Self::Kind> = IsPanicFmt::NEW;
}Expand description
Trait for types that can be formatted by const panics.
§Implementor
Implementors are expected to also define this inherent method to format the type:
const fn to_panicvals<'a>(&'a self, f: FmtArg) -> [PanicVal<'a>; <Self as PanicFmt>::PV_COUNT]The returned PanicVal can also be PanicVal<'static>.
§Implementation examples
This trait can be implemented in these ways (in increasing order of verbosity):
- Using the PanicFmtderive macro (requires the opt-in"derive"feature)
- Using the impl_panicfmtmacro (requires the default-enabled"non_basic"feature)
- Using the flatten_panicvalsmacro (requires the default-enabled"non_basic"feature)
- Using no macros at all
§Macro-less impl
Implementing this trait for a simple enum without using macros.
use const_panic::{ArrayString, FmtArg, PanicFmt, PanicVal};
// `ArrayString` requires the "non_basic" crate feature (enabled by default),
// everything else in this example works with no enabled crate features.
assert_eq!(
    ArrayString::<99>::concat_panicvals(&[
        &Foo::Bar.to_panicvals(FmtArg::DEBUG),
        &[PanicVal::write_str(",")],
        &Foo::Baz.to_panicvals(FmtArg::DEBUG),
        &[PanicVal::write_str(",")],
        &Foo::Qux.to_panicvals(FmtArg::DEBUG),
    ]).unwrap(),
    "Bar,Baz,Qux",
);
enum Foo {
    Bar,
    Baz,
    Qux,
}
impl PanicFmt for Foo {
    type This = Self;
    type Kind = const_panic::IsCustomType;
    const PV_COUNT: usize = 1;
}
impl Foo {
    pub const fn to_panicvals(self, _: FmtArg) -> [PanicVal<'static>; Foo::PV_COUNT] {
        match self {
            Self::Bar => [PanicVal::write_str("Bar")],
            Self::Baz => [PanicVal::write_str("Baz")],
            Self::Qux => [PanicVal::write_str("Qux")],
        }
    }
}
Required Associated Constants§
Provided Associated Constants§
Sourceconst PROOF: IsPanicFmt<Self, Self::This, Self::Kind> = IsPanicFmt::NEW
 
const PROOF: IsPanicFmt<Self, Self::This, Self::Kind> = IsPanicFmt::NEW
A marker type that proves that Self implements PanicFmt.
Used by const_panic macros to coerce both standard library and
user-defined types into some type that has a to_panicvals method.
Required Associated Types§
Sourcetype This: ?Sized
 
type This: ?Sized
The type after dereferencing all references.
User-defined types should generally set this to Self.
Sourcetype Kind
 
type Kind
Whether this is a user-defined type or standard library type.
User-defined types should generally set this to IsCustomType.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.