Skip to main content

ccp_config/
cu_config.rs

1use serde::Deserialize;
2use serde::Serialize;
3
4use crate::defaults::default_utility_queue_size;
5use crate::unresolved_config::*;
6use crate::*;
7
8/// Subset of main config for ccp-cu-main worker.
9
10#[derive(Clone, Debug, PartialEq)]
11pub struct CUWorkerConfig {
12    pub optimizations: Optimizations,
13    pub logs: SimpleLogs,
14    pub workers: Workers,
15    pub utility_queue_size: usize,
16}
17
18#[derive(Clone, Debug, Serialize, Deserialize)]
19#[serde(rename_all = "kebab-case")]
20pub struct UnresolvedCUWorkerConfig {
21    #[serde(default)]
22    pub optimizations: UnresolvedOptimizations,
23    #[serde(default)]
24    pub logs: UnresolvedSimpleLogs,
25    #[serde(default)]
26    pub workers: UnresolvedWorkers,
27    #[serde(default = "default_utility_queue_size")]
28    pub utility_queue_size: usize,
29}
30
31impl UnresolvedCUWorkerConfig {
32    pub fn resolve(self) -> eyre::Result<CUWorkerConfig> {
33        let optimizations = self.optimizations.resolve_for_cu_worker()?;
34        let logs = self.logs.resolve();
35        let workers = self.workers.resolve();
36        let utility_queue_size = self.utility_queue_size;
37
38        let config = CUWorkerConfig {
39            optimizations,
40            logs,
41            workers,
42            utility_queue_size,
43        };
44        Ok(config)
45    }
46}
47
48pub fn load_cu_config(path: Option<&str>) -> eyre::Result<CUWorkerConfig> {
49    use ::config::Config;
50    use ::config::File;
51    use ::config::FileFormat;
52
53    let mut config_builder = Config::builder();
54    if let Some(path) = path {
55        let config_source = File::with_name(path)
56            .required(true)
57            .format(FileFormat::Toml);
58        config_builder = config_builder.add_source(config_source);
59    }
60    let config = config_builder.build()?;
61
62    let config: UnresolvedCUWorkerConfig = config.try_deserialize()?;
63    config.resolve()
64}