soph_runtime/config/
mod.rs

1use serde::{Deserialize, Serialize};
2use soph_config::support::default;
3
4#[derive(Debug, Serialize, Deserialize)]
5pub struct Runtime {
6    #[serde(default)]
7    pub kind: Kind,
8    #[serde(default)]
9    pub enable_io: bool,
10    #[serde(default = "default_nevents")]
11    pub nevents: usize,
12    #[serde(default)]
13    pub enable_time: bool,
14    #[serde(default)]
15    pub start_paused: bool,
16    #[serde(default)]
17    pub worker_threads: Option<usize>,
18    #[serde(default = "default_max_blocking_threads")]
19    pub max_blocking_threads: usize,
20    #[serde(default = "default_thread_name")]
21    pub thread_name: String,
22    #[serde(default)]
23    pub thread_stack_size: Option<usize>,
24    #[serde(default)]
25    pub keep_alive: Option<u64>,
26    #[serde(default)]
27    pub global_queue_interval: Option<u32>,
28    #[serde(default = "default_event_interval")]
29    pub event_interval: u32,
30    #[serde(default = "default_local_queue_capacity")]
31    pub local_queue_capacity: usize,
32    #[serde(default)]
33    pub unhandled_panic: UnhandledPanic,
34    #[serde(default)]
35    pub enable_metrics_poll_time_histogram: bool,
36    #[serde(default)]
37    pub disable_lifo_slot: bool,
38}
39
40impl Default for Runtime {
41    fn default() -> Self {
42        default::<Self>().expect("Failed to get default value")
43    }
44}
45
46#[derive(Debug, Default, Serialize, Deserialize)]
47pub enum Kind {
48    #[serde(rename = "current-thread")]
49    CurrentThread,
50    #[default]
51    #[serde(rename = "multi-thread")]
52    MultiThread,
53}
54
55#[derive(Debug, Default, Serialize, Deserialize)]
56pub enum UnhandledPanic {
57    #[serde(rename = "ignore")]
58    #[default]
59    Ignore,
60    #[serde(rename = "shutdown-runtime")]
61    ShutdownRuntime,
62}
63
64fn default_nevents() -> usize {
65    1024
66}
67
68fn default_max_blocking_threads() -> usize {
69    512
70}
71
72fn default_thread_name() -> String {
73    "tokio-runtime-worker".to_string()
74}
75
76fn default_event_interval() -> u32 {
77    61
78}
79
80fn default_local_queue_capacity() -> usize {
81    256
82}