use ayun_config::config::default;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct Runtime {
#[serde(default)]
pub kind: Kind,
#[serde(default)]
pub enable_io: bool,
#[serde(default = "default_nevents")]
pub nevents: usize,
#[serde(default)]
pub enable_time: bool,
#[serde(default)]
pub start_paused: bool,
#[serde(default)]
pub worker_threads: Option<usize>,
#[serde(default = "default_max_blocking_threads")]
pub max_blocking_threads: usize,
#[serde(default = "default_thread_name")]
pub thread_name: String,
#[serde(default)]
pub thread_stack_size: Option<usize>,
#[serde(default)]
pub keep_alive: Option<u64>,
#[serde(default)]
pub global_queue_interval: Option<u32>,
#[serde(default = "default_event_interval")]
pub event_interval: u32,
#[serde(default = "default_local_queue_capacity")]
pub local_queue_capacity: usize,
#[serde(default)]
pub unhandled_panic: UnhandledPanic,
#[serde(default)]
pub metrics_poll_count_histogram_enable: bool,
#[serde(default)]
pub disable_lifo_slot: bool,
}
impl Default for Runtime {
fn default() -> Self {
default::<Self>().expect("Failed to get default value")
}
}
#[derive(Debug, Default, Serialize, Deserialize)]
pub enum Kind {
#[serde(rename = "current-thread")]
CurrentThread,
#[default]
#[serde(rename = "multi-thread")]
MultiThread,
#[serde(rename = "multi-thread-alt")]
MultiThreadAlt,
}
#[derive(Debug, Default, Serialize, Deserialize)]
pub enum UnhandledPanic {
#[serde(rename = "ignore")]
#[default]
Ignore,
#[serde(rename = "shutdown-runtime")]
ShutdownRuntime,
}
fn default_nevents() -> usize {
1024
}
fn default_max_blocking_threads() -> usize {
512
}
fn default_thread_name() -> String {
"tokio-runtime-worker".to_string()
}
fn default_event_interval() -> u32 {
61
}
fn default_local_queue_capacity() -> usize {
256
}