Skip to main content

circular_buffer/
debug.rs

1// Copyright © 2023-2026 Andrea Corbellini and contributors
2// SPDX-License-Identifier: BSD-3-Clause
3
4use crate::CircularBuffer;
5use crate::FixedCircularBuffer;
6use core::fmt;
7use core::iter;
8use core::ops::Deref;
9
10#[cfg(feature = "alloc")]
11use crate::HeapCircularBuffer;
12
13#[derive(Default, Copy, Clone)]
14struct Placeholder;
15
16impl fmt::Debug for Placeholder {
17    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18        f.write_str("_")
19    }
20}
21
22impl<T> fmt::Debug for CircularBuffer<T>
23where
24    T: fmt::Debug,
25{
26    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
27        let mut list = f.debug_list();
28        list.entries(self);
29        list.entries(iter::repeat_n(Placeholder, self.capacity() - self.len()));
30        list.finish()
31    }
32}
33
34impl<T, const N: usize> fmt::Debug for FixedCircularBuffer<T, N>
35where
36    T: fmt::Debug,
37{
38    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
39        self.deref().fmt(f)
40    }
41}
42
43#[cfg(feature = "alloc")]
44impl<T> fmt::Debug for HeapCircularBuffer<T>
45where
46    T: fmt::Debug,
47{
48    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
49        self.deref().fmt(f)
50    }
51}