Skip to main content

ps_promise/methods/shared/promise/implementations/
debug.rs

1use std::fmt::{self, Debug, Formatter};
2
3use crate::PromiseRejection;
4
5use super::super::SharedPromise;
6
7impl<T, E> Debug for SharedPromise<T, E>
8where
9    E: PromiseRejection,
10{
11    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
12        f.debug_struct("SharedPromise")
13            .field("waiter_id", &self.waiter_id)
14            .finish_non_exhaustive()
15    }
16}
17
18#[cfg(test)]
19mod tests {
20    use crate::{Promise, PromiseRejection, TaskFailure};
21
22    #[derive(Debug, Clone, PartialEq)]
23    enum E {
24        AlreadyConsumed,
25        TaskFailed,
26    }
27
28    impl PromiseRejection for E {
29        fn already_consumed() -> Self {
30            Self::AlreadyConsumed
31        }
32
33        fn task_failed(_: TaskFailure) -> Self {
34            Self::TaskFailed
35        }
36    }
37
38    #[test]
39    fn debug_names_the_type_and_waiter() {
40        let shared = Promise::<i32, E>::resolve(7).shared();
41
42        let rendered = format!("{shared:?}");
43
44        assert!(rendered.starts_with("SharedPromise { waiter_id: "));
45    }
46}