use super::{DhcpStatus, DnsStatus};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DhcpSettings {
#[serde(rename = "DnsStatus")]
pub dns_status: DnsStatus,
#[serde(rename = "DhcpStartIPAddress")]
pub dhcp_start_ip_address: String,
#[serde(rename = "DhcpIPAddress")]
pub dhcp_ip_address: String,
#[serde(rename = "DhcpStatus")]
pub dhcp_status: DhcpStatus,
#[serde(rename = "DhcpLanNetmask")]
pub dhcp_lan_netmask: String,
#[serde(rename = "SecondaryDns")]
pub secondary_dns: String,
#[serde(rename = "PrimaryDns")]
pub primary_dns: String,
#[serde(rename = "DhcpEndIPAddress")]
pub dhcp_end_ip_address: String,
#[serde(rename = "DhcpLeaseTime")]
pub dhcp_lease_time: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DhcpSettingsRequest {
#[serde(rename = "DhcpIPAddress")]
pub dhcp_ip_address: String,
#[serde(rename = "DhcpLanNetmask")]
pub dhcp_lan_netmask: String,
#[serde(rename = "DhcpStatus")]
pub dhcp_status: DhcpStatus,
#[serde(rename = "DhcpStartIPAddress")]
pub dhcp_start_ip_address: String,
#[serde(rename = "DhcpEndIPAddress")]
pub dhcp_end_ip_address: String,
#[serde(rename = "DhcpLeaseTime")]
pub dhcp_lease_time: String,
#[serde(rename = "DnsStatus")]
pub dns_status: DnsStatus,
#[serde(rename = "PrimaryDns")]
pub primary_dns: String,
#[serde(rename = "SecondaryDns")]
pub secondary_dns: String,
}
impl DhcpSettingsRequest {
#[allow(clippy::too_many_arguments)]
pub fn new(
dhcp_ip_address: String,
dhcp_lan_netmask: String,
dhcp_status: DhcpStatus,
dhcp_start_ip_address: String,
dhcp_end_ip_address: String,
dhcp_lease_time: String,
dns_status: DnsStatus,
primary_dns: String,
secondary_dns: String,
) -> Self {
Self {
dhcp_ip_address,
dhcp_lan_netmask,
dhcp_status,
dhcp_start_ip_address,
dhcp_end_ip_address,
dhcp_lease_time,
dns_status,
primary_dns,
secondary_dns,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_dhcp_settings_request_creation() {
let request = DhcpSettingsRequest::new(
"192.168.62.1".to_string(),
"255.255.255.0".to_string(),
DhcpStatus::Enabled,
"192.168.62.100".to_string(),
"192.168.62.200".to_string(),
"86400".to_string(),
DnsStatus::Enabled,
"192.168.62.1".to_string(),
"192.168.62.1".to_string(),
);
assert_eq!(request.dhcp_ip_address, "192.168.62.1");
assert_eq!(request.dhcp_status, DhcpStatus::Enabled);
assert_eq!(request.dhcp_lease_time, "86400");
}
#[test]
fn test_dhcp_settings_serialization() {
let request = DhcpSettingsRequest::new(
"192.168.8.1".to_string(),
"255.255.255.0".to_string(),
DhcpStatus::Enabled,
"192.168.8.100".to_string(),
"192.168.8.200".to_string(),
"86400".to_string(),
DnsStatus::Enabled,
"192.168.8.1".to_string(),
"192.168.8.1".to_string(),
);
let xml = serde_xml_rs::to_string(&request).unwrap();
assert!(xml.contains("<DhcpIPAddress>192.168.8.1</DhcpIPAddress>"));
assert!(xml.contains("<DhcpStatus>1</DhcpStatus>"));
}
}