rosrust/util/
kill.rs
1use crossbeam::channel;
2
3pub enum KillMode {
4 Sync,
5 Async,
6}
7
8impl KillMode {
9 fn into_channel<T>(self) -> (channel::Sender<T>, channel::Receiver<T>) {
10 match self {
11 KillMode::Sync => channel::bounded(0),
12 KillMode::Async => channel::unbounded(),
13 }
14 }
15}
16
17#[derive(Clone)]
18pub struct Sender {
19 pub kill_tx: channel::Sender<()>,
20}
21
22impl Sender {
23 pub fn send(&self) -> Result<(), channel::SendError<()>> {
24 self.kill_tx.send(())
25 }
26}
27
28pub struct Receiver {
29 pub kill_rx: channel::Receiver<()>,
30}
31
32impl Receiver {
33 pub fn try_recv(&self) -> Result<(), channel::TryRecvError> {
34 self.kill_rx.try_recv()
35 }
36}
37
38pub fn channel(kill_mode: KillMode) -> (Sender, Receiver) {
39 let (kill_tx, kill_rx) = kill_mode.into_channel();
40 (Sender { kill_tx }, Receiver { kill_rx })
41}