use std::time::Duration;
use super::{BacnetClient, ClientError};
pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(5);
pub const DEFAULT_HOST: &str = "0.0.0.0";
#[derive(Debug, Clone)]
pub struct ClientConfig {
pub host: String,
pub port: u16,
pub timeout: Duration,
pub retries: u8,
}
impl Default for ClientConfig {
fn default() -> Self {
Self {
host: DEFAULT_HOST.to_string(),
port: 0,
timeout: DEFAULT_TIMEOUT,
retries: 0,
}
}
}
impl ClientConfig {
pub fn bind_addr(&self) -> String {
format!("{}:{}", self.host, self.port)
}
}
#[derive(Debug, Clone, Default)]
pub struct ClientBuilder {
config: ClientConfig,
}
impl ClientBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn local_addr(mut self, host: impl Into<String>) -> Self {
self.config.host = host.into();
self
}
pub fn port(mut self, port: u16) -> Self {
self.config.port = port;
self
}
pub fn timeout(mut self, timeout: Duration) -> Self {
self.config.timeout = timeout;
self
}
pub fn retries(mut self, retries: u8) -> Self {
self.config.retries = retries;
self
}
pub fn build(self) -> Result<BacnetClient, ClientError> {
BacnetClient::from_config(self.config)
}
}