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