use crate::{prelude::*, util::*};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
pub struct ManagementURL {
pub name: String,
pub url: Option<String>,
#[serde(
skip_serializing_if = "Option::is_none",
deserialize_with = "deserialize_string_or_number_to_u64",
default
)]
pub id: Option<u64>,
}
impl CreateFromJson for ManagementURL {}
impl ConfigObject for ManagementURL {
type Builder = ManagementURLBuilder;
fn builder() -> Self::Builder {
ManagementURLBuilder::new()
}
fn unique_name(&self) -> String {
if self.url.as_ref().is_some_and(|u| u.len() < 5) {
return format!("{}{}", self.name, self.url.as_ref().unwrap());
} else if self.url.as_ref().is_some() {
return format!(
"{}{}",
self.name,
&self.url.as_ref().unwrap()[self.url.as_ref().unwrap().len() - 5..]
);
}
self.name.clone()
}
fn minimal(name: &str) -> Result<Self, OpsviewConfigError> {
Ok(Self {
name: name.to_string(),
..Default::default()
})
}
}
#[derive(Clone, Debug, Default)]
pub struct ManagementURLBuilder {
name: Option<String>,
url: Option<String>,
}
impl Builder for ManagementURLBuilder {
type ConfigObject = ManagementURL;
fn new() -> Self {
Self::default()
}
fn name(mut self, name: &str) -> Self {
self.name = Some(name.to_string());
self
}
fn build(self) -> Result<ManagementURL, OpsviewConfigError> {
let name = require_field(&self.name, "name")?;
let url = require_field(&self.url, "url")?;
Ok(ManagementURL {
name: validate_and_trim_managementurl_name(&name)?,
url: Some(validate_uri(&url)?),
id: None,
})
}
}
impl ManagementURLBuilder {
pub fn clear_name(mut self) -> Self {
self.name = None;
self
}
pub fn clear_url(mut self) -> Self {
self.url = None;
self
}
pub fn url(mut self, url: &str) -> Self {
self.url = Some(url.to_string());
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default() {
let url = ManagementURL::default();
assert!(url.name.is_empty());
}
#[test]
fn test_minimal() {
let url = ManagementURL::minimal("My Management URL");
assert_eq!(url.unwrap().name, "My Management URL".to_string());
}
}