pokeys_thread/
controller_builder.rs

1//! Builder for creating thread controllers
2
3use crate::controller::ThreadControllerImpl;
4use crate::logging::Logger;
5use std::path::PathBuf;
6use std::sync::Arc;
7
8/// Builder for creating thread controllers
9pub struct ThreadControllerBuilder {
10    /// Default refresh interval in milliseconds
11    default_refresh_interval: u64,
12    /// Logger
13    logger: Option<Arc<dyn Logger>>,
14    /// Model directory
15    model_dir: Option<PathBuf>,
16}
17
18impl ThreadControllerBuilder {
19    /// Create a new thread controller builder
20    pub fn new() -> Self {
21        Self {
22            default_refresh_interval: 100, // Default refresh interval: 100ms
23            logger: None,
24            model_dir: None,
25        }
26    }
27
28    /// Set the default refresh interval
29    pub fn default_refresh_interval(mut self, interval_ms: u64) -> Self {
30        self.default_refresh_interval = interval_ms;
31        self
32    }
33
34    /// Set the logger
35    pub fn with_logger(mut self, logger: Arc<dyn Logger>) -> Self {
36        self.logger = Some(logger);
37        self
38    }
39
40    /// Set the model directory
41    pub fn model_dir(mut self, dir: Option<PathBuf>) -> Self {
42        self.model_dir = dir;
43        self
44    }
45
46    /// Build a thread controller
47    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}