use tokio::task::JoinHandle;
pub struct SubscriptionHandle {
stream_handle: JoinHandle<()>,
event_handle: Option<JoinHandle<()>>,
metrics_handle: Option<JoinHandle<()>>,
}
impl SubscriptionHandle {
pub fn new(
stream_handle: JoinHandle<()>,
event_handle: Option<JoinHandle<()>>,
metrics_handle: Option<JoinHandle<()>>,
) -> Self {
Self { stream_handle, event_handle, metrics_handle }
}
pub fn stop(self) {
self.stream_handle.abort();
if let Some(handle) = self.event_handle {
handle.abort();
}
if let Some(handle) = self.metrics_handle {
handle.abort();
}
}
pub async fn join(self) -> Result<(), tokio::task::JoinError> {
let _ = self.stream_handle.await;
if let Some(handle) = self.event_handle {
let _ = handle.await;
}
if let Some(handle) = self.metrics_handle {
let _ = handle.await;
}
Ok(())
}
}