1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
use crate::stack::with_top; use crate::SpanWrap; use crossbeam_channel as cb; #[derive(Clone, Shrinkwrap)] pub struct SpanSender<T>(cb::Sender<SpanWrap<T>>); impl<T> From<cb::Sender<SpanWrap<T>>> for SpanSender<T> { fn from(tx: cb::Sender<SpanWrap<T>>) -> SpanSender<T> { SpanSender(tx) } } impl<T: Send> SpanSender<T> { pub fn send_wrapped(&self, v: T) -> Result<(), cb::SendError<SpanWrap<T>>> { let context = with_top(|top| top.and_then(|t| t.context().clone())); self.0.send(SpanWrap::new(v, context)) } } pub type SpanReceiver<T> = cb::Receiver<SpanWrap<T>>;