defmt/impls/
primitives.rs1use 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
73impl<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}