mod device;
use crate::configuration::Configuration;
use crate::error::Result;
#[cfg(feature = "async")]
pub use device::Driver;
pub use device::{Device, Tun};
use std::ffi::OsString;
#[derive(Clone, Debug)]
pub struct PlatformConfig {
pub(crate) device_guid: Option<u128>,
pub(crate) wintun_file: OsString,
pub(crate) dns_servers: Option<Vec<std::net::IpAddr>>,
}
impl Default for PlatformConfig {
fn default() -> Self {
Self {
device_guid: None,
wintun_file: "wintun.dll".into(),
dns_servers: None,
}
}
}
impl PlatformConfig {
pub fn device_guid(&mut self, device_guid: u128) {
log::trace!("Windows configuration device GUID");
self.device_guid = Some(device_guid);
}
pub fn wintun_file<S: Into<OsString>>(&mut self, wintun_file: S) {
self.wintun_file = wintun_file.into();
}
pub fn dns_servers(&mut self, dns_servers: &[std::net::IpAddr]) {
self.dns_servers = Some(dns_servers.to_vec());
}
}
pub fn create(configuration: &Configuration) -> Result<Device> {
Device::new(configuration)
}