1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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>>;
pub fn lax_send_wrapped<T: Send + std::fmt::Debug>(
tx: SpanSender<T>,
val: T,
_failure_reason: &str,
) -> bool {
match tx.send_wrapped(val) {
Ok(()) => true,
Err(_) => {
false
}
}
}