uppercut/
config.rs

1use std::time::Duration;
2
3#[derive(Default, Clone)]
4pub struct Config {
5    pub scheduler: SchedulerConfig,
6    pub remote: RemoteConfig,
7}
8
9impl Config {
10    pub fn new(scheduler: SchedulerConfig, remote: RemoteConfig) -> Config {
11        Config { scheduler, remote }
12    }
13}
14
15#[derive(Debug, Clone)]
16pub struct ServerConfig {
17    pub events_capacity: usize,
18    pub recv_buffer_size: usize,
19    pub send_buffer_size: usize,
20}
21
22impl Default for ServerConfig {
23    fn default() -> Self {
24        Self {
25            events_capacity: 1024,
26            recv_buffer_size: 1024,
27            send_buffer_size: 1024,
28        }
29    }
30}
31
32#[derive(Debug, Clone)]
33pub struct ClientConfig {
34    pub events_capacity: usize,
35    pub recv_buffer_size: usize,
36    pub send_buffer_size: usize,
37}
38
39impl Default for ClientConfig {
40    fn default() -> Self {
41        Self {
42            events_capacity: 1024,
43            recv_buffer_size: 1024,
44            send_buffer_size: 1024,
45        }
46    }
47}
48
49#[derive(Clone, Default)]
50pub struct RemoteConfig {
51    pub enabled: bool,
52    pub listening: String,
53    pub server: ServerConfig,
54    pub client: ClientConfig,
55}
56
57impl RemoteConfig {
58    pub fn listening_at(listening: &str, server: ServerConfig, client: ClientConfig) -> Self {
59        Self {
60            enabled: true,
61            listening: listening.to_string(),
62            server,
63            client,
64        }
65    }
66}
67
68#[derive(Clone)]
69pub struct SchedulerConfig {
70    pub default_mailbox_capacity: usize,
71    pub logging_enabled: bool,
72    pub metric_reporting_enabled: bool,
73    pub metric_reporting_interval: Duration,
74    pub delay_precision: Duration,
75    pub actor_worker_threads: usize,
76    pub extra_worker_threads: usize,
77    pub eager_shutdown_enabled: bool,
78}
79
80impl Default for SchedulerConfig {
81    fn default() -> Self {
82        SchedulerConfig {
83            default_mailbox_capacity: 16,
84            logging_enabled: true,
85            metric_reporting_enabled: false,
86            metric_reporting_interval: Duration::from_secs(1),
87            delay_precision: Duration::from_millis(1),
88            actor_worker_threads: 4,
89            extra_worker_threads: 1,
90            eager_shutdown_enabled: true,
91        }
92    }
93}
94
95impl SchedulerConfig {
96    pub fn with_total_threads(total_threads: usize) -> Self {
97        SchedulerConfig {
98            actor_worker_threads: total_threads,
99            ..Default::default()
100        }
101    }
102
103    pub(crate) fn total_threads_required(&self) -> usize {
104        self.actor_worker_threads + self.extra_worker_threads + 1
105    }
106}