command_executor/
thread_pool_builder.rs1use crate::queue_type::QueueType;
2use crate::shutdown_mode::ShutdownMode;
3use crate::thread_pool::ThreadPool;
4
5pub struct ThreadPoolBuilder {
9 name: String,
10 tasks: usize,
11 queue_type: QueueType,
12 queue_size: usize,
13 join_error_handler: fn(String, String),
14 shutdown_mode: ShutdownMode,
15}
16
17impl ThreadPoolBuilder {
18 pub fn new() -> ThreadPoolBuilder {
44 let join_error_handler = |name: String, message: String| {
45 panic!("Thread {name} ended with and error {message}")
46 };
47
48 ThreadPoolBuilder {
49 name: "unnamed".to_string(),
50 tasks: 1,
51 queue_type: QueueType::CrossbeamBlockingQueue,
52 queue_size: 16,
53 join_error_handler,
54 shutdown_mode: ShutdownMode::Immediate,
55 }
56 }
57
58 pub fn with_name(&mut self, name: String) -> &mut ThreadPoolBuilder {
60 self.name = name.clone();
61 self
62 }
63
64 pub fn with_name_str(&mut self, name: &str) -> &mut ThreadPoolBuilder {
66 self.name = name.to_string();
67 self
68 }
69
70 pub fn with_tasks(&mut self, tasks: usize) -> &mut ThreadPoolBuilder {
72 self.tasks = tasks;
73 self
74 }
75
76 pub fn with_shutdown_mode(&mut self, shutdown_mode: ShutdownMode) -> &mut ThreadPoolBuilder {
78 self.shutdown_mode = shutdown_mode;
79 self
80 }
81
82 pub fn with_queue_type(&mut self, queue_type: QueueType) -> &mut ThreadPoolBuilder {
84 self.queue_type = queue_type;
85 self
86 }
87
88 pub fn with_queue_size(&mut self, queue_size: usize) -> &mut ThreadPoolBuilder {
90 self.queue_size = queue_size;
91 self
92 }
93
94 pub fn with_join_error_handler(&mut self, join_error_handler: fn(String, String)) -> &mut ThreadPoolBuilder {
96 self.join_error_handler = join_error_handler;
97 self
98 }
99
100 pub fn build(&self) -> Result<ThreadPool, anyhow::Error> {
102 ThreadPool::new(
103 self.name.clone(),
104 self.tasks,
105 self.queue_type,
106 self.queue_size,
107 self.join_error_handler,
108 self.shutdown_mode.clone(),
109 )
110 }
111}
112
113impl Default for ThreadPoolBuilder {
114 fn default() -> Self {
115 Self::new()
116 }
117}