defmt/impls/
primitives.rs

1use crate::export;
2
3use super::*;
4
5macro_rules! prim {
6    ($ty:ty, $fmt: literal, $self_:ident, $write:expr) => {
7        impl Format for $ty {
8            default_format!();
9
10            #[inline]
11            fn _format_tag() -> Str {
12                internp!($fmt)
13            }
14
15            #[inline]
16            fn _format_data(&$self_) {
17                $write
18            }
19        }
20    };
21}
22
23prim!(i8, "{=i8}", self, export::i8(self));
24prim!(i16, "{=i16}", self, export::i16(self));
25prim!(i32, "{=i32}", self, export::i32(self));
26prim!(i64, "{=i64}", self, export::i64(self));
27prim!(i128, "{=i128}", self, export::i128(self));
28prim!(isize, "{=isize}", self, export::isize(self));
29prim!(u8, "{=u8}", self, export::u8(self));
30prim!(u16, "{=u16}", self, export::u16(self));
31prim!(u32, "{=u32}", self, export::u32(self));
32prim!(u64, "{=u64}", self, export::u64(self));
33prim!(u128, "{=u128}", self, export::u128(self));
34prim!(usize, "{=usize}", self, export::usize(self));
35prim!(f32, "{=f32}", self, export::f32(self));
36prim!(f64, "{=f64}", self, export::f64(self));
37prim!(str, "{=str}", self, export::str(self));
38prim!(bool, "{=bool}", self, export::bool(self));
39prim!(Str, "{=istr}", self, export::istr(self));
40prim!(char, "{=char}", self, export::char(self));
41
42impl<T> Format for [T]
43where
44    T: Format,
45{
46    default_format!();
47
48    #[inline]
49    fn _format_tag() -> Str {
50        internp!("{=[?]}")
51    }
52
53    #[inline]
54    fn _format_data(&self) {
55        export::fmt_slice(self);
56    }
57}
58
59impl<T> Format for &'_ T
60where
61    T: Format + ?Sized,
62{
63    delegate_format!(T, self, self);
64}
65
66impl<T> Format for &'_ mut T
67where
68    T: Format + ?Sized,
69{
70    delegate_format!(T, self, self);
71}
72
73// Format raw pointer as hexadecimal
74//
75// First cast raw pointer to thin pointer, then to usize and finally format as hexadecimal.
76impl<T> Format for *const T
77where
78    T: ?Sized,
79{
80    fn format(&self, fmt: Formatter) {
81        crate::write!(fmt, "0x{:x}", *self as *const () as usize);
82    }
83}
84
85impl<T> Format for *mut T
86where
87    T: ?Sized,
88{
89    fn format(&self, fmt: Formatter) {
90        Format::format(&(*self as *const T), fmt)
91    }
92}