ps-promise 0.1.0-17

Promise-like owned futures
Documentation
use std::fmt::{self, Debug, Formatter};

use crate::PromiseRejection;

use super::super::SharedPromise;

impl<T, E> Debug for SharedPromise<T, E>
where
    E: PromiseRejection,
{
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        f.debug_struct("SharedPromise")
            .field("waiter_id", &self.waiter_id)
            .finish_non_exhaustive()
    }
}

#[cfg(test)]
mod tests {
    use crate::{Promise, PromiseRejection, TaskFailure};

    #[derive(Debug, Clone, PartialEq)]
    enum E {
        AlreadyConsumed,
        TaskFailed,
    }

    impl PromiseRejection for E {
        fn already_consumed() -> Self {
            Self::AlreadyConsumed
        }

        fn task_failed(_: TaskFailure) -> Self {
            Self::TaskFailed
        }
    }

    #[test]
    fn debug_names_the_type_and_waiter() {
        let shared = Promise::<i32, E>::resolve(7).shared();

        let rendered = format!("{shared:?}");

        assert!(rendered.starts_with("SharedPromise { waiter_id: "));
    }
}