use std::sync::Arc;
use std::time::Duration;
use crate::exit_handler::{ExitHandler, NoopExitHandler};
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SystemConfig {
pub max_actors: usize,
pub actor_termination_timeout: Duration,
#[cfg_attr(feature = "serde", serde(skip, default = "defaults::default_exit_handler"))]
pub exit_handler: Arc<dyn ExitHandler>,
}
impl Default for SystemConfig {
fn default() -> Self {
Self {
max_actors: defaults::DEFAULT_MAX_ACTORS,
actor_termination_timeout: defaults::DEFAULT_ACTOR_TERMINATION_TIMEOUT,
exit_handler: defaults::default_exit_handler(),
}
}
}
mod defaults {
use super::*;
pub(super) const DEFAULT_MAX_ACTORS: usize = 1_024;
pub(super) const DEFAULT_ACTOR_TERMINATION_TIMEOUT: Duration = Duration::from_secs(30);
pub(super) fn default_exit_handler() -> Arc<dyn ExitHandler> {
Arc::new(NoopExitHandler)
}
}