1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use builders::Builder;
use crate::Result;

/// Pool Config
///
/// Configuration for the [ThreadPool](crate::ThreadPool)
#[derive(Clone,Copy,Builder,Debug)]
pub struct PoolConfig {
    #[builder(def = 16_u16)]
    pub n_workers: u16,
    #[builder(optional = true)]
    pub max_jobs: Option<u16>,
    /// Default value: None
    #[builder(def = { None } )]
    pub incoming_buf_size: Option<u16>,
}

impl PoolConfig {
    pub fn validate(&self) -> Result<()> {
        if self.n_workers == 0 {
            return Err("Invalid pool size: 0".into());
        }
        if let Some(max) = self.max_jobs {
            if max < self.n_workers {
                return Err(format!("Max number of jobs ({max}) is lower \
                        than the number of workers ({})", self.n_workers).into())
            }
        }
        Ok(())
    }
}

impl Default for PoolConfig {
    /// Default configuration
    ///
    /// NÂș Workers: 16
    /// Max Jobs: None
    /// Incoming buf size: None
    fn default() -> Self {
        PoolConfig::builder().build().unwrap()
    }
}