vine_core/core/
runner.rs

1use std::any::type_name_of_val;
2use std::sync::Arc;
3use async_trait::async_trait;
4use config::Config;
5use log::debug;
6use tokio::runtime::Runtime;
7use crate::core::Error;
8
9#[async_trait]
10pub trait Runner {
11    fn name(&self) -> &str {
12        let name = type_name_of_val(self);
13        match name.rsplit_once("::") {
14            None => name,
15            Some((_, name)) => name
16        }
17    }
18
19    fn runtime(&self, _config: Arc<Config>) -> Result<Runtime, Error> {
20        debug!("create tokio Runtime for {} runner", self.name());
21        tokio::runtime::Builder::new_multi_thread()
22            .thread_name(self.name().to_lowercase())
23            .enable_all()
24            .build()
25            .map_err(|_e| Error::from(format!("cannot initialize runtime for runner {}", self.name())))
26    }
27
28    async fn run(&self) -> Result<(), Error>;
29}