const_panic/fmt_impls/
fmt_range.rs1use crate::{FmtArg, PanicFmt, PanicVal, StdWrapper};
2
3use core::ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo, RangeToInclusive};
4
5macro_rules! impl_range_panicfmt_one {
6 (
7 fn(&$self:ident: $ty:ty, $f:ident) -> $pv_count:literal {
8 $($content:tt)*
9 }
10 ) => {
11 impl PanicFmt for $ty {
12 type This = Self;
13 type Kind = crate::fmt::IsStdType;
14 const PV_COUNT: usize = $pv_count;
15 }
16
17 impl crate::StdWrapper<&$ty> {
18 #[doc = concat!(
19 "Converts this `", stringify!($ty), "` to a single-element `PanicVal` array."
20 )]
21 pub const fn to_panicvals($self, $f: FmtArg) -> [PanicVal<'static>; $pv_count] {
22 $($content)*
23 }
24 }
25 }
26}
27
28macro_rules! impl_range_panicfmt {
29 ($elem_ty:ty) => {
30 impl_range_panicfmt_one! {
31 fn(&self: Range<$elem_ty>, f) -> 3 {
32 [
33 StdWrapper(&self.0.start).to_panicval(f),
34 PanicVal::write_str(".."),
35 StdWrapper(&self.0.end).to_panicval(f),
36 ]
37 }
38 }
39
40 impl_range_panicfmt_one! {
41 fn(&self: RangeFrom<$elem_ty>, f) -> 2 {
42 [
43 StdWrapper(&self.0.start).to_panicval(f),
44 PanicVal::write_str(".."),
45 ]
46 }
47 }
48
49 impl_range_panicfmt_one! {
50 fn(&self: RangeTo<$elem_ty>, f) -> 2 {
51 [
52 PanicVal::write_str(".."),
53 StdWrapper(&self.0.end).to_panicval(f),
54 ]
55 }
56 }
57
58 impl_range_panicfmt_one! {
59 fn(&self: RangeToInclusive<$elem_ty>, f) -> 2 {
60 [
61 PanicVal::write_str("..="),
62 StdWrapper(&self.0.end).to_panicval(f),
63 ]
64 }
65 }
66
67 impl_range_panicfmt_one! {
68 fn(&self: RangeInclusive<$elem_ty>, f) -> 3 {
69 [
70 StdWrapper(self.0.start()).to_panicval(f),
71 PanicVal::write_str("..="),
72 StdWrapper(self.0.end()).to_panicval(f),
73 ]
74 }
75 }
76 };
77}
78
79impl_range_panicfmt! {usize}
80
81impl_range_panicfmt_one! {
84 fn(&self: RangeFull, _f) -> 1 {
85 [PanicVal::write_str("..")]
86 }
87}