use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Config {
pub data_submission_interval: f64,
pub clear_iot_data_cache_interval: f64,
pub bluetooth_scan_interval: f64,
pub supported_devices: Vec<String>,
pub http_timeout_seconds: u64,
pub rpc_address: String,
pub rpc_port: u16,
pub known_devices_file: Option<String>,
pub issuer_url: Option<String>,
pub device_private_key_path: Option<String>,
pub samples_every_seconds: i64,
pub max_data_points_per_device: usize,
pub max_total_data_points: usize,
pub max_data_age_seconds: i64,
pub mock_backend_url: Option<String>,
pub mock_bearer_token: Option<String>,
}
impl Default for Config {
fn default() -> Self {
Self {
data_submission_interval: 3.0,
clear_iot_data_cache_interval: 180.0,
bluetooth_scan_interval: 5.0,
supported_devices: vec![
"A&D_UA-651BLE_".to_string(),
"BLESmart_".to_string(),
"X4 Smart".to_string(),
],
http_timeout_seconds: 10,
rpc_address: "127.0.0.1".to_string(),
rpc_port: 4567,
known_devices_file: None,
issuer_url: None,
device_private_key_path: None,
samples_every_seconds: 2,
max_data_points_per_device: 1000,
max_total_data_points: 10000,
max_data_age_seconds: 24 * 60 * 60, mock_backend_url: None,
mock_bearer_token: None,
}
}
}
impl Config {
pub fn data_submission_duration(&self) -> Duration {
Duration::from_secs_f64(self.data_submission_interval)
}
pub fn cache_clear_duration(&self) -> Duration {
Duration::from_secs_f64(self.clear_iot_data_cache_interval)
}
pub fn bluetooth_scan_duration(&self) -> Duration {
Duration::from_secs_f64(self.bluetooth_scan_interval)
}
pub fn http_timeout(&self) -> Duration {
Duration::from_secs(self.http_timeout_seconds)
}
pub fn rpc_bind_address(&self) -> String {
format!("{}:{}", self.rpc_address, self.rpc_port)
}
}