use crate::{prelude::*, util::*};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum RancidConnectionType {
Telnet,
SSH,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
pub struct RancidVendor {
pub name: String,
#[serde(rename = "ref", skip_serializing_if = "Option::is_none")]
pub ref_: Option<String>,
}
impl CreateFromJson for RancidVendor {}
impl ConfigObject for RancidVendor {
type Builder = RancidVendorBuilder;
fn builder() -> Self::Builder {
RancidVendorBuilder::new()
}
fn unique_name(&self) -> String {
self.name.clone()
}
}
#[derive(Clone, Debug, Default)]
pub struct RancidVendorBuilder {
name: Option<String>,
ref_: Option<String>,
}
impl Builder for RancidVendorBuilder {
type ConfigObject = RancidVendor;
fn new() -> Self {
RancidVendorBuilder {
name: None,
ref_: None,
}
}
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(RancidVendor {
name: validate_and_trim_rancid_vendor_name(&name)?,
ref_: self.ref_,
})
}
}
impl RancidVendorBuilder {
pub fn ref_(mut self, ref_: &str) -> Self {
self.ref_ = Some(ref_.to_string());
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default() {
let vendor = RancidVendor::default();
assert_eq!(vendor.name, "".to_string());
}
#[test]
fn test_minimal() {
let vendor = RancidVendor::minimal("AXIS T8504R");
assert_eq!(vendor.unwrap().name, "AXIS T8504R".to_string());
}
#[test]
fn test_serialize_rancid_connection_type() {
let telnet = RancidConnectionType::Telnet;
let ssh = RancidConnectionType::SSH;
assert_eq!(serde_json::to_string(&telnet).unwrap(), "\"telnet\"");
assert_eq!(serde_json::to_string(&ssh).unwrap(), "\"ssh\"");
}
#[test]
fn test_deserialize_rancid_connection_type() {
let telnet = RancidConnectionType::Telnet;
let ssh = RancidConnectionType::SSH;
assert_eq!(
serde_json::from_str::<RancidConnectionType>("\"telnet\"").unwrap(),
telnet
);
assert_eq!(
serde_json::from_str::<RancidConnectionType>("\"ssh\"").unwrap(),
ssh
);
}
}