use std::io::{Read, Write};
use std::net::Ipv4Addr;
use crate::configuration::Configuration;
use crate::error::*;
pub trait Device: Read + Write {
type Queue: Read + Write;
fn configure(&mut self, config: &Configuration) -> Result<()> {
if let Some(ip) = config.address {
self.set_address(ip)?;
}
if let Some(ip) = config.destination {
self.set_destination(ip)?;
}
if let Some(ip) = config.broadcast {
self.set_broadcast(ip)?;
}
if let Some(ip) = config.netmask {
self.set_netmask(ip)?;
}
if let Some(mtu) = config.mtu {
self.set_mtu(mtu)?;
}
if let Some(enabled) = config.enabled {
self.enabled(enabled)?;
}
Ok(())
}
fn name(&self) -> &str;
fn set_name(&mut self, name: &str) -> Result<()>;
fn enabled(&mut self, value: bool) -> Result<()>;
fn address(&self) -> Result<Ipv4Addr>;
fn set_address(&mut self, value: Ipv4Addr) -> Result<()>;
fn destination(&self) -> Result<Ipv4Addr>;
fn set_destination(&mut self, value: Ipv4Addr) -> Result<()>;
fn broadcast(&self) -> Result<Ipv4Addr>;
fn set_broadcast(&mut self, value: Ipv4Addr) -> Result<()>;
fn netmask(&self) -> Result<Ipv4Addr>;
fn set_netmask(&mut self, value: Ipv4Addr) -> Result<()>;
fn mtu(&self) -> Result<i32>;
fn set_mtu(&mut self, value: i32) -> Result<()>;
fn queue(&mut self, index: usize) -> Option<&mut Self::Queue>;
}