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}