mod backend;
pub use backend::SubprocessBackendConfig;
mod task;
pub use task::SubprocessTaskConfig;
mod logger;
pub use logger::LogConfig;
mod runner;
pub use runner::SubprocessRunner;
use std::sync::Arc;
use solti_model::Labels;
use solti_runner::RunnerRouter;
use crate::ExecError;
pub const LABEL_RUNNER_NAME: &str = "runner-name";
pub fn register_subprocess_runner(
router: &mut RunnerRouter,
name: &'static str,
) -> Result<(), ExecError> {
register_runner_inner(router, name, Arc::new(SubprocessRunner::new(name)))
}
pub fn register_subprocess_runner_with_backend(
router: &mut RunnerRouter,
name: &'static str,
backend: SubprocessBackendConfig,
) -> Result<(), ExecError> {
register_runner_inner(
router,
name,
Arc::new(SubprocessRunner::with_config(name, backend)?),
)
}
fn register_runner_inner(
router: &mut RunnerRouter,
name: &'static str,
runner: Arc<SubprocessRunner>,
) -> Result<(), ExecError> {
if router.contains_label(LABEL_RUNNER_NAME, name) {
return Err(ExecError::DuplicateRunner {
name: name.to_string(),
});
}
let mut labels = Labels::new();
labels.insert(LABEL_RUNNER_NAME, name);
router.register_with_labels(runner, labels);
Ok(())
}