Skip to main content

PanicFmt

Trait PanicFmt 

Source
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 PanicFmt derive macro (requires the opt-in "derive" feature)
  • Using the impl_panicfmt macro (requires the default-enabled "non_basic" feature)
  • Using the flatten_panicvals macro (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§

Source

const PV_COUNT: usize

The length of the array returned in Self::to_panicvals (an inherent method that formats the type for panic messages).

Provided Associated Constants§

Source

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§

Source

type This: ?Sized

The type after dereferencing all references.

User-defined types should generally set this to Self.

Source

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".

Implementations on Foreign Types§

Source§

impl PanicFmt for Ordering

Available on crate feature non_basic only.
Source§

impl PanicFmt for Infallible

Available on crate feature non_basic only.
Source§

impl PanicFmt for FromBytesWithNulError

Available on crate features non_basic and rust_1_88 only.
Source§

impl PanicFmt for IntErrorKind

Available on crate feature rust_1_82 only.
Source§

impl PanicFmt for Ordering

Available on crate feature non_basic only.
Source§

impl PanicFmt for bool

Source§

impl PanicFmt for char

Source§

impl PanicFmt for i8

Source§

impl PanicFmt for i16

Source§

impl PanicFmt for i32

Source§

impl PanicFmt for i64

Source§

impl PanicFmt for i128

Source§

impl PanicFmt for isize

Source§

impl PanicFmt for str

Source§

impl PanicFmt for u8

Source§

impl PanicFmt for u16

Source§

impl PanicFmt for u32

Source§

impl PanicFmt for u64

Source§

impl PanicFmt for u128

Source§

impl PanicFmt for ()

Available on crate feature non_basic only.
Source§

impl PanicFmt for usize

Source§

impl PanicFmt for FromBytesUntilNulError

Available on crate features non_basic and rust_1_88 only.
Source§

impl PanicFmt for PhantomPinned

Available on crate feature non_basic only.
Source§

impl PanicFmt for ParseIntError

Available on crate feature rust_1_82 only.
Source§

impl PanicFmt for Range<usize>

Available on crate feature non_basic only.
Source§

impl PanicFmt for RangeFrom<usize>

Available on crate feature non_basic only.
Source§

impl PanicFmt for RangeFull

Available on crate feature non_basic only.
Source§

impl PanicFmt for RangeInclusive<usize>

Available on crate feature non_basic only.
Source§

impl PanicFmt for RangeTo<usize>

Available on crate feature non_basic only.
Source§

impl PanicFmt for RangeToInclusive<usize>

Available on crate feature non_basic only.
Source§

impl PanicFmt for Utf8Error

Available on crate feature rust_1_64 only.
Source§

impl PanicFmt for NonZeroI8

Available on crate feature non_basic only.
Source§

impl PanicFmt for NonZeroI16

Available on crate feature non_basic only.
Source§

impl PanicFmt for NonZeroI32

Available on crate feature non_basic only.
Source§

impl PanicFmt for NonZeroI64

Available on crate feature non_basic only.
Source§

impl PanicFmt for NonZeroI128

Available on crate feature non_basic only.
Source§

impl PanicFmt for NonZeroIsize

Available on crate feature non_basic only.
Source§

impl PanicFmt for NonZeroU8

Available on crate feature non_basic only.
Source§

impl PanicFmt for NonZeroU16

Available on crate feature non_basic only.
Source§

impl PanicFmt for NonZeroU32

Available on crate feature non_basic only.
Source§

impl PanicFmt for NonZeroU64

Available on crate feature non_basic only.
Source§

impl PanicFmt for NonZeroU128

Available on crate feature non_basic only.
Source§

impl PanicFmt for NonZeroUsize

Available on crate feature non_basic only.
Source§

impl<'a> PanicFmt for [PanicVal<'a>]

Source§

const PV_COUNT: usize = usize::MAX

Source§

type This = [PanicVal<'a>]

Source§

type Kind = IsStdType

Source§

impl<'a, T: PanicFmt + ?Sized> PanicFmt for &'a T

Source§

const PV_COUNT: usize = T::PV_COUNT

Source§

type This = <T as PanicFmt>::This

Source§

type Kind = <T as PanicFmt>::Kind

Source§

impl<'a, const N: usize> PanicFmt for [PanicVal<'a>; N]

Source§

impl<'s> PanicFmt for [&'s str]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [bool]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [char]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [i8]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [i16]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [i32]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [i64]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [i128]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [isize]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [u8]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [u16]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [u32]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [u64]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [u128]

Available on crate feature non_basic only.
Source§

impl<'s> PanicFmt for [usize]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [&'s str; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [bool; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [char; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [i8; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [i16; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [i32; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [i64; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [i128; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [isize; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [u8; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [u16; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [u32; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [u64; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [u128; LEN]

Available on crate feature non_basic only.
Source§

impl<'s, const LEN: usize> PanicFmt for [usize; LEN]

Available on crate feature non_basic only.
Source§

impl<T> PanicFmt for Option<T>
where T: PanicFmt,

Available on crate feature non_basic only.

Note: there is only to_panicvals methods for Options of standard library types for now.

Source§

impl<T: ?Sized> PanicFmt for *const T

Available on crate feature non_basic only.
Source§

impl<T: ?Sized> PanicFmt for *mut T

Available on crate feature non_basic only.
Source§

impl<T: ?Sized> PanicFmt for PhantomData<T>

Available on crate feature non_basic only.
Source§

impl<T: ?Sized> PanicFmt for NonNull<T>

Available on crate feature non_basic only.

Implementors§

Source§

impl PanicFmt for Delimiter

Available on crate feature non_basic only.
Source§

impl PanicFmt for PanicVal<'_>

Source§

impl PanicFmt for Separator<'_>

Available on crate feature non_basic only.
Source§

impl<T> PanicFmt for StdWrapper<T>
where T: PanicFmt,

Source§

impl<const CAP: usize> PanicFmt for ArrayString<CAP>

Available on crate feature non_basic only.