#[derive(Debug, Clone)]
pub struct BindingDefaults {
pub mac_address: Option<String>,
pub interface: Option<String>,
pub host: Option<String>,
pub port: Option<u16>,
}
impl BindingDefaults {
pub fn port_based(default_host: &str, default_port: u16) -> Self {
Self {
mac_address: None,
interface: None,
host: Some(default_host.to_string()),
port: Some(default_port),
}
}
pub fn interface_based(default_interface: &str) -> Self {
Self {
mac_address: None,
interface: Some(default_interface.to_string()),
host: None,
port: None,
}
}
pub fn apply(
&self,
user_mac: Option<String>,
user_interface: Option<String>,
user_host: Option<String>,
user_port: Option<u16>,
) -> (Option<String>, Option<String>, Option<String>, Option<u16>) {
(
user_mac.or_else(|| self.mac_address.clone()),
user_interface.or_else(|| self.interface.clone()),
user_host.or_else(|| self.host.clone()),
user_port.or(self.port),
)
}
}