Skip to main content

hatchery_server/
lib.rs

1//! Host for hatchery subservices. See `deploy/README.md`.
2
3pub mod config;
4pub mod control;
5pub mod error;
6#[cfg(feature = "harness")]
7pub mod harness;
8#[cfg(feature = "m4a")]
9pub mod m4a;
10#[cfg(feature = "memory")]
11pub mod memory;
12pub mod subservice;
13pub mod supervisor;
14
15pub use config::ServerConfig;
16pub use error::ServerError;
17pub use subservice::{State, Status, Subservice};
18pub use supervisor::Supervisor;
19
20/// Build the subservices enabled by features and configuration.
21pub fn build_subservices(config: &ServerConfig) -> Vec<Box<dyn Subservice>> {
22    #[allow(unused_mut)]
23    let mut services: Vec<Box<dyn Subservice>> = Vec::new();
24    #[cfg(feature = "harness")]
25    if config.harness_enabled {
26        if let Some(bin) = config.harness_bin.clone() {
27            services.push(Box::new(harness::HarnessSubservice::new(bin, config.harness_args.clone())));
28        }
29    }
30    #[cfg(feature = "m4a")]
31    if config.m4a_enabled {
32        services.push(Box::new(m4a::M4aSubservice::new(
33            &config.data_dir,
34            config.m4a_master_key_var.clone(),
35        )));
36    }
37    #[cfg(feature = "memory")]
38    services.push(Box::new(memory::MemorySubservice::new(
39        config.memory_bin.clone(),
40        &config.data_dir,
41    )));
42    let _ = config;
43    services
44}