Continuation of #11. Refines the client structure and implements GET. `clap` is decoupled from the lib code. This is done to avoid any CLI parsing concerns to leak into the lib. The main motivation for this is to allow the reader to focus on Tokio concerns and not CLI parsing concerns.
32 lines
669 B
Rust
32 lines
669 B
Rust
use tokio::sync::broadcast;
|
|
|
|
#[derive(Debug)]
|
|
pub(crate) struct Shutdown {
|
|
shutdown: bool,
|
|
notify: broadcast::Receiver<()>,
|
|
}
|
|
|
|
impl Shutdown {
|
|
pub(crate) fn new(notify: broadcast::Receiver<()>) -> Shutdown {
|
|
Shutdown {
|
|
shutdown: false,
|
|
notify,
|
|
}
|
|
}
|
|
|
|
pub(crate) fn is_shutdown(&self) -> bool {
|
|
self.shutdown
|
|
}
|
|
|
|
/// Receive the shutdown notice
|
|
pub(crate) async fn recv(&mut self) {
|
|
if self.shutdown {
|
|
return;
|
|
}
|
|
|
|
// Cannot receive a "lag error" as only one value is ever sent.
|
|
let _ = self.notify.recv().await;
|
|
self.shutdown = true;
|
|
}
|
|
}
|