use crate::{prelude::*, util::*};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
pub struct SNMPTrapRule {
pub name: String,
#[serde(
skip_serializing_if = "Option::is_none",
deserialize_with = "deserialize_string_or_number_to_u64",
default
)]
pub alertlevel: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: 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 process: Option<bool>,
#[serde(
rename = "ref",
skip_serializing_if = "Option::is_none",
deserialize_with = "deserialize_readonly",
default
)]
pub ref_: 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 uncommitted: Option<bool>,
}
impl CreateFromJson for SNMPTrapRule {}
impl ConfigObject for SNMPTrapRule {
type Builder = SNMPTrapRuleBuilder;
fn builder() -> Self::Builder {
SNMPTrapRuleBuilder::new()
}
fn unique_name(&self) -> String {
match self.ref_ {
Some(ref ref_) => ref_.to_string(),
None => self.name.clone(),
}
}
}
#[derive(Clone, Debug, Default)]
pub struct SNMPTrapRuleBuilder {
name: Option<String>,
alertlevel: Option<u64>,
code: Option<String>,
message: Option<String>,
process: Option<bool>,
}
impl Builder for SNMPTrapRuleBuilder {
type ConfigObject = SNMPTrapRule;
fn new() -> Self {
SNMPTrapRuleBuilder::default()
}
fn name(mut self, name: &str) -> Self {
self.name = Some(name.to_string());
self
}
fn build(self) -> Result<Self::ConfigObject, OpsviewConfigError> {
let name = require_field(&self.name, "name")?;
Ok(SNMPTrapRule {
name,
alertlevel: self.alertlevel,
code: self.code,
message: self.message,
process: self.process,
ref_: None,
uncommitted: None,
})
}
}
impl SNMPTrapRuleBuilder {
pub fn alertlevel(mut self, alertlevel: u64) -> Self {
self.alertlevel = Some(alertlevel);
self
}
pub fn clear_alertlevel(mut self) -> Self {
self.alertlevel = None;
self
}
pub fn clear_code(mut self) -> Self {
self.code = None;
self
}
pub fn clear_message(mut self) -> Self {
self.message = None;
self
}
pub fn clear_process(mut self) -> Self {
self.process = None;
self
}
pub fn clear_name(mut self) -> Self {
self.name = None;
self
}
pub fn code(mut self, code: &str) -> Self {
self.code = Some(code.to_string());
self
}
pub fn message(mut self, message: &str) -> Self {
self.message = Some(message.to_string());
self
}
pub fn process(mut self, process: bool) -> Self {
self.process = Some(process);
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_minimal() {
let snmptraprule = SNMPTrapRule::minimal("My SNMPTrapRule");
assert_eq!(snmptraprule.unwrap().name, "My SNMPTrapRule".to_string());
}
#[test]
fn test_default() {
let snmptraprule = SNMPTrapRule::default();
assert!(snmptraprule.name.is_empty());
}
}