checkpoint

This commit is contained in:
Jett Chen 2023-12-10 03:44:31 +08:00
parent ede0d13bca
commit db1750a045
39 changed files with 514 additions and 359 deletions

View file

@ -5,31 +5,42 @@ use fehler::throws;
use super::TunInterface;
#[derive(Debug, Clone, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize, schemars::JsonSchema))]
#[cfg_attr(
feature = "serde",
derive(serde::Serialize, serde::Deserialize, schemars::JsonSchema)
)]
pub struct TunOptions {
/// (Windows + Linux) Name the tun interface.
pub(crate) name: Option<String>,
pub name: Option<String>,
/// (Linux) Don't include packet information.
pub(crate) no_pi: Option<()>,
pub no_pi: bool,
/// (Linux) Avoid opening an existing persistant device.
pub(crate) tun_excl: Option<()>,
pub tun_excl: bool,
/// (MacOS) Whether to seek the first available utun device.
pub(crate) seek_utun: Option<()>,
pub seek_utun: Option<i32>,
/// (Linux) The IP address of the tun interface.
pub(crate) address: Option<String>,
pub address: Option<String>,
}
impl TunOptions {
pub fn new() -> Self { Self::default() }
pub fn new() -> Self {
Self::default()
}
pub fn name(mut self, name: &str) -> Self {
self.name = Some(name.to_owned());
self
}
pub fn no_pi(mut self, enable: bool) { self.no_pi = enable.then_some(()); }
pub fn no_pi(mut self, enable: bool) -> Self {
self.no_pi = enable;
self
}
pub fn tun_excl(mut self, enable: bool) { self.tun_excl = enable.then_some(()); }
pub fn tun_excl(mut self, enable: bool) -> Self {
self.tun_excl = enable;
self
}
pub fn address(mut self, address: impl ToString) -> Self {
self.address = Some(address.to_string());
@ -37,5 +48,7 @@ impl TunOptions {
}
#[throws]
pub fn open(self) -> TunInterface { TunInterface::new_with_options(self)? }
pub fn open(self) -> TunInterface {
TunInterface::new_with_options(self)?
}
}