use std::fmt;
use std::sync::Arc;
use std::time::Duration;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub struct FeedbackSent {
pub pending_for: Duration,
}
#[derive(Clone)]
pub struct FeedbackObserver(Arc<dyn Fn(FeedbackSent) + Send + Sync>);
impl FeedbackObserver {
pub fn new(observer: impl Fn(FeedbackSent) + Send + Sync + 'static) -> Self {
Self(Arc::new(observer))
}
pub(crate) fn observe(&self, sent: FeedbackSent) {
(self.0)(sent)
}
}
impl fmt::Debug for FeedbackObserver {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str("FeedbackObserver(..)")
}
}
impl PartialEq for FeedbackObserver {
fn eq(&self, other: &Self) -> bool {
Arc::ptr_eq(&self.0, &other.0)
}
}
impl Eq for FeedbackObserver {}
impl std::panic::UnwindSafe for FeedbackObserver {}
impl std::panic::RefUnwindSafe for FeedbackObserver {}