diff options
Diffstat (limited to 'libs/leash/src/lib.rs')
| -rw-r--r-- | libs/leash/src/lib.rs | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/libs/leash/src/lib.rs b/libs/leash/src/lib.rs index 1de7687..3dafdac 100644 --- a/libs/leash/src/lib.rs +++ b/libs/leash/src/lib.rs @@ -5,11 +5,11 @@ use shared::{ log::{error, info}, }; use std::{future::Future, pin::Pin}; -use tokio::{signal::{unix::SignalKind}, sync::oneshot}; +use tokio::{signal::unix::SignalKind, sync::oneshot}; -pub type AnyhowResultFuture<T> = Pin<Box<dyn Future<Output = Result<T>>>>; +pub type AnyhowResultFuture<T> = Pin<Box<dyn Future<Output = Result<T>> + Send>>; pub trait Component: Send + Sync + 'static + Sized { - type Config: Default + Clone + DeserializeOwned; + type Config: Default + Clone + DeserializeOwned + Send; const SERVICE_NAME: &'static str; fn start( @@ -32,7 +32,11 @@ pub trait Component: Send + Sync + 'static + Sized { tokio::spawn(async move {}); tokio::spawn(async move { - match tokio::signal::unix::signal(SignalKind::terminate()).unwrap().recv().await { + match tokio::signal::unix::signal(SignalKind::terminate()) + .unwrap() + .recv() + .await + { Some(()) => { info!("Stopping program."); @@ -44,7 +48,6 @@ pub trait Component: Send + Sync + 'static + Sized { } } }); - self.start(settings?, stop_channel).await }) } @@ -55,8 +58,9 @@ macro_rules! ignite { ($c:ty) => { #[allow(dead_code)] fn main() -> anyhow::Result<()> { + use leash::Component; let rt = tokio::runtime::Runtime::new()?; - rt.block_on(Box::new(<$c as Component>::new())._internal_start())?; + rt.block_on(<$c as Component>::new()._internal_start())?; Ok(()) } }; @@ -67,7 +71,7 @@ mod test { use serde::Deserialize; use tokio::sync::oneshot; - use crate::Component; + use crate as leash; #[derive(Clone, Copy)] struct TestComponent {} @@ -75,7 +79,7 @@ mod test { #[derive(Default, Clone, Deserialize, Copy)] struct TestComponentConfig {} - impl Component for TestComponent { + impl leash::Component for TestComponent { type Config = TestComponentConfig; const SERVICE_NAME: &'static str = "test_component"; |
