pokeys_thread/
controller_builder.rs1use crate::controller::ThreadControllerImpl;
4use crate::logging::Logger;
5use std::path::PathBuf;
6use std::sync::Arc;
7
8pub struct ThreadControllerBuilder {
10 default_refresh_interval: u64,
12 logger: Option<Arc<dyn Logger>>,
14 model_dir: Option<PathBuf>,
16}
17
18impl ThreadControllerBuilder {
19 pub fn new() -> Self {
21 Self {
22 default_refresh_interval: 100, logger: None,
24 model_dir: None,
25 }
26 }
27
28 pub fn default_refresh_interval(mut self, interval_ms: u64) -> Self {
30 self.default_refresh_interval = interval_ms;
31 self
32 }
33
34 pub fn with_logger(mut self, logger: Arc<dyn Logger>) -> Self {
36 self.logger = Some(logger);
37 self
38 }
39
40 pub fn model_dir(mut self, dir: Option<PathBuf>) -> Self {
42 self.model_dir = dir;
43 self
44 }
45
46 pub fn build(self) -> ThreadControllerImpl {
48 let mut controller = if let Some(logger) = self.logger {
49 ThreadControllerImpl::with_logger(logger)
50 } else {
51 ThreadControllerImpl::new()
52 };
53
54 controller.set_default_refresh_interval(self.default_refresh_interval);
55 controller
56 }
57}
58
59impl Default for ThreadControllerBuilder {
60 fn default() -> Self {
61 Self::new()
62 }
63}