use crate::{prelude::*, util::*};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
pub struct MonitoringServer {
pub name: String,
#[serde(
rename = "ref",
skip_serializing_if = "Option::is_none",
deserialize_with = "deserialize_readonly",
default
)]
pub ref_: Option<String>,
}
impl CreateFromJson for MonitoringServer {}
impl ConfigObject for MonitoringServer {
type Builder = MonitoringServerBuilder;
fn builder() -> Self::Builder {
MonitoringServerBuilder::new()
}
fn unique_name(&self) -> String {
match &self.ref_ {
Some(ref_) => ref_.clone(),
None => self.name.clone(),
}
}
}
impl Persistent for MonitoringServer {
fn id(&self) -> Option<u64> {
None
}
fn ref_(&self) -> Option<String> {
if self.ref_.as_ref().is_some_and(|x| !x.is_empty()) {
self.ref_.clone()
} else {
None
}
}
fn name(&self) -> Option<String> {
if self.name.is_empty() {
None
} else {
Some(self.name.clone())
}
}
fn name_regex(&self) -> Option<String> {
Some(MONITORINGCLUSTER_NAME_REGEX_STR.to_string())
}
fn validated_name(&self, name: &str) -> Result<String, OpsviewConfigError> {
validate_and_trim_monitoringcluster_name(name)
}
fn set_name(&mut self, new_name: &str) -> Result<String, OpsviewConfigError> {
self.name = self.validated_name(new_name)?;
Ok(self.name.clone())
}
fn clear_readonly(&mut self) {
self.ref_ = None;
}
}
impl PersistentMap for ConfigObjectMap<MonitoringServer> {}
#[derive(Clone, Debug, Default)]
pub struct MonitoringServerBuilder {
name: Option<String>,
}
impl Builder for MonitoringServerBuilder {
type ConfigObject = MonitoringServer;
fn new() -> Self {
MonitoringServerBuilder::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(MonitoringServer {
name: validate_and_trim_monitoringcluster_name(&name)?,
ref_: None,
})
}
}
impl MonitoringServerBuilder {
pub fn clear_name(mut self) -> Self {
self.name = None;
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default() {
let server = MonitoringServer::default();
assert!(server.name.is_empty());
}
#[test]
fn test_minimal() {
let server = MonitoringServer::minimal("My Monitoring Server");
assert_eq!(server.unwrap().name, "My Monitoring Server".to_string());
}
}