#[macro_export]
macro_rules! recv_break {
( $rx:tt ) => {{
let res = loop {
match $rx.recv() {
Ok(worker_pool::DownMsg::Stop) => break None,
Ok(worker_pool::DownMsg::Pause) => {}
Ok(worker_pool::DownMsg::Continue) => {},
Ok(worker_pool::DownMsg::Other(x)) => break Some(x),
Err(_) => break None
}
};
match res {
Some(x) => x,
None => break
}
}}
}
#[macro_export]
macro_rules! try_recv_break {
( $rx:tt ) => {{
match $rx.try_recv() {
Ok(worker_pool::DownMsg::Stop) => break,
Ok(worker_pool::DownMsg::Pause) => {
let break_loop = loop {
match $rx.recv() {
Ok(worker_pool::DownMsg::Stop) => break true,
Ok(worker_pool::DownMsg::Pause) => {}
Ok(worker_pool::DownMsg::Continue) => break false,
Ok(worker_pool::DownMsg::Other(x)) => {},
Err(_) => break true
}
};
if break_loop {
break
} else {
None
}
}
Ok(worker_pool::DownMsg::Continue) => None,
Ok(worker_pool::DownMsg::Other(x)) => Some(x),
Err(std::sync::mpsc::TryRecvError::Disconnected) => break,
Err(std::sync::mpsc::TryRecvError::Empty) => None,
}
}}
}