use std::sync::mpsc::Sender;
use crate::{Event, Observer};
#[derive(Clone, Debug)]
pub struct StdMpscObserver {
pub sender: Sender<Event>,
}
impl From<Sender<Event>> for StdMpscObserver {
fn from(sender: Sender<Event>) -> Self {
Self { sender }
}
}
impl From<StdMpscObserver> for Sender<Event> {
fn from(observer: StdMpscObserver) -> Self {
observer.sender
}
}
impl Observer for StdMpscObserver {
fn observe(&self, event: Event) {
#[cfg(feature = "tracing")]
if let Err(err) = self.sender.send(event) {
tracing::debug!(
error = ?err,
"Failed to send event: receiver has been dropped. This is expected during shutdown."
);
}
#[cfg(not(feature = "tracing"))]
let _ = self.sender.send(event);
}
}
#[derive(Clone, Debug)]
pub struct NopObserver;
impl Observer for NopObserver {
fn observe(&self, event: Event) {
let _ = event;
}
}