use std::num::NonZeroUsize;
#[derive(Debug, Clone)]
pub struct ServerConfiguration {
pub(crate) n_workers: NonZeroUsize,
}
impl Default for ServerConfiguration {
fn default() -> Self {
Self::new()
}
}
impl ServerConfiguration {
pub fn new() -> Self {
let n_workers = match std::thread::available_parallelism() {
Ok(n) => n,
Err(e) => {
let fallback = NonZeroUsize::new(2).unwrap();
tracing::warn!(
error.msg = %e,
error.details = ?e,
"Failed to determine the amount of available parallelism. \
Setting the number of worker threads to a fallback value of {}", fallback);
fallback
}
};
Self { n_workers }
}
#[track_caller]
pub fn set_n_workers(mut self, n: usize) -> Self {
assert!(n > 0, "The number of workers must be greater than 0");
self.n_workers = NonZeroUsize::new(n).unwrap();
self
}
pub fn get_n_workers(&self) -> NonZeroUsize {
self.n_workers
}
}