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;
12#[cfg(feature = "m4a")]
13pub mod hub;
14pub mod node_controller;
15pub mod drain_consumer;
16#[cfg(feature = "harness")]
17pub mod kernel;
18pub mod operator_control;
19pub mod mesh_runtime;
20#[cfg(feature = "m4a")]
21pub mod node_sink;
22#[cfg(feature = "m4a")]
23pub mod messenger;
24#[cfg(feature = "m4a")]
25pub mod provision;
26#[cfg(feature = "m4a")]
27pub mod tasks;
28pub mod subservice;
29pub mod supervisor;
30
31pub use config::ServerConfig;
32pub use error::ServerError;
33pub use subservice::{State, Status, Subservice};
34pub use supervisor::Supervisor;
35
36/// Build the subservices enabled by features and configuration.
37pub fn build_subservices(config: &ServerConfig) -> Vec<Box<dyn Subservice>> {
38    #[allow(unused_mut)]
39    let mut services: Vec<Box<dyn Subservice>> = Vec::new();
40    #[cfg(feature = "harness")]
41    if config.harness_enabled {
42        if let Some(bin) = config.harness_bin.clone() {
43            services.push(Box::new(harness::HarnessSubservice::new(bin, config.harness_args.clone())));
44        }
45    }
46    #[cfg(feature = "m4a")]
47    if config.m4a_enabled {
48        services.push(Box::new(m4a::M4aSubservice::new(
49            &config.data_dir,
50            config.m4a_master_key_var.clone(),
51        )));
52    }
53    #[cfg(feature = "m4a")]
54    if let (true, Some(master), Some(c2_addr)) =
55        (config.m4a_enabled, config.m4a_master_key_var.clone(), config.provision_c2_addr.clone())
56    {
57        services.push(Box::new(provision::ProvisionSubservice::new(provision::ProvisionConfig {
58            data_dir: config.data_dir.clone(),
59            master_key_var: master,
60            c2_addr,
61            c2_token_var: config.provision_c2_token_var.clone(),
62            interval: std::time::Duration::from_secs(config.provision_interval_secs),
63            server_ref: config.m4a_server_ref.clone(),
64            mail_domain: config.mail_domain.clone(),
65            policy_path: config.policy_path.clone(),
66        })));
67    }
68    #[cfg(feature = "memory")]
69    services.push(Box::new(memory::MemorySubservice::new(
70        config.memory_bin.clone(),
71        &config.data_dir,
72    )));
73    let _ = config;
74    services
75}