use crate::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct SNMPInterface {
#[serde(
skip_serializing_if = "Option::is_none",
deserialize_with = "deserialize_string_or_number_to_option_bool",
serialize_with = "serialize_option_bool_as_string",
default
)]
pub active: Option<bool>,
pub discards_critical: Option<String>,
pub discards_warning: Option<String>,
#[serde(
skip_serializing_if = "Option::is_none",
deserialize_with = "deserialize_string_or_number_to_option_bool",
serialize_with = "serialize_option_bool_as_string",
default
)]
pub duplicatename: Option<bool>,
pub errors_critical: Option<String>,
pub errors_warning: Option<String>,
#[serde(
skip_serializing_if = "Option::is_none",
deserialize_with = "deserialize_string_or_number_to_u64",
default
)]
pub indexid: Option<u64>,
pub interfacename: Option<String>,
pub throughput_critical: Option<String>,
pub throughput_warning: Option<String>,
}
pub type SNMPInterfaces = Vec<SNMPInterface>;
pub trait SNMPInterfacesExt {
fn validate(&self) -> Result<(), OpsviewConfigError>;
}
impl SNMPInterfacesExt for SNMPInterfaces {
fn validate(&self) -> Result<(), OpsviewConfigError> {
if !self.is_empty() && self[0].interfacename != Some("".to_string()) {
return Err(OpsviewConfigError::SNMPInterfacesIndex0InvalidName);
}
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_invalid_name_for_index_0() {
let mut i: SNMPInterface = Default::default();
i.interfacename = Some("eth0".to_string());
i.indexid = Some(0);
let i = i;
let mut interfaces = SNMPInterfaces::new();
interfaces.push(i);
let interfaces = interfaces;
let result = interfaces.validate();
match result {
Err(OpsviewConfigError::SNMPInterfacesIndex0InvalidName) => (),
_ => panic!("Expected SNMPInterfacesIndex0InvalidName error"),
}
}
}