use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct MockSourceConfig {
#[serde(default = "default_data_type")]
pub data_type: String,
#[serde(default = "default_interval_ms")]
pub interval_ms: u64,
}
fn default_data_type() -> String {
"generic".to_string()
}
fn default_interval_ms() -> u64 {
5000
}
impl Default for MockSourceConfig {
fn default() -> Self {
Self {
data_type: default_data_type(),
interval_ms: default_interval_ms(),
}
}
}
impl MockSourceConfig {
pub const VALID_DATA_TYPES: [&'static str; 3] = ["counter", "sensor", "generic"];
pub fn validate(&self) -> anyhow::Result<()> {
if !Self::VALID_DATA_TYPES.contains(&self.data_type.as_str()) {
return Err(anyhow::anyhow!(
"Validation error: data_type '{}' is not valid. \
Valid options are: counter, sensor, generic",
self.data_type
));
}
if self.interval_ms == 0 {
return Err(anyhow::anyhow!(
"Validation error: interval_ms cannot be 0. \
Please specify a positive interval in milliseconds (minimum 1)"
));
}
Ok(())
}
}