1pub 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
36pub 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}