diff options
Diffstat (limited to 'src/blocking.rs')
-rw-r--r-- | src/blocking.rs | 84 |
1 files changed, 47 insertions, 37 deletions
diff --git a/src/blocking.rs b/src/blocking.rs index f66a096..7e9a92b 100644 --- a/src/blocking.rs +++ b/src/blocking.rs @@ -9,72 +9,82 @@ #[cfg(feature = "tunnel")] pub use crate::tunnel; +/// A blocking wrapper around the async [`crate::Connection`]. +#[derive(Debug)] +pub struct Connection(crate::Connection); + macro_rules! blockify { - ($blk:ident, $r:path) => { - pub fn $blk() -> crate::Result<()> { - tokio::runtime::Runtime::new()?.block_on($r()) + ($blk:ident) => { + pub fn $blk(&self) -> crate::Result<()> { + tokio::runtime::Runtime::new()?.block_on(self.0.$blk()) } }; - ($blk:ident, $r:path, $($v:tt: $t:ty),*) => { - pub fn $blk($($v: $t),*) -> crate::Result<()> { - tokio::runtime::Runtime::new()?.block_on($r($($v),*)) + ($blk:ident, $($v:tt: $t:ty),*) => { + pub fn $blk(&self, $($v: $t),*) -> crate::Result<()> { + tokio::runtime::Runtime::new()?.block_on(self.0.$blk($($v),*)) } }; - ($blk:ident -> $ret:ty, $r:path, $($v:tt: $t:ty),*) => { - pub fn $blk($($v: $t),*) -> crate::Result<$ret> { - tokio::runtime::Runtime::new()?.block_on($r($($v),*)) + ($blk:ident -> $ret:ty, $($v:tt: $t:ty),*) => { + pub fn $blk(&self, $($v: $t),*) -> crate::Result<$ret> { + tokio::runtime::Runtime::new()?.block_on(self.0.$blk($($v),*)) } }; } #[cfg(feature = "addr")] pub mod addr { - use crate::addr; + use super::Connection; use std::net::IpAddr; use futures::TryStreamExt; - blockify!(flush, addr::flush, link: String); - blockify!(flush4, addr::flush4, link: String); - blockify!(flush6, addr::flush6, link: String); - blockify!(flush6_global, addr::flush6_global); - blockify!(add, addr::add, link: String, addr: IpAddr, prefix_len: u8); - blockify!(add_link_local, addr::add_link_local, link: String, addr: IpAddr, prefix_len: u8); + impl Connection { + blockify!(address_flush, link: String); + blockify!(address_flush4, link: String); + blockify!(address_flush6, link: String); + blockify!(address_flush6_global); + blockify!(address_add, link: String, addr: IpAddr, prefix_len: u8); + blockify!(address_add_link_local, link: String, addr: IpAddr, prefix_len: u8); - pub fn get(link: String) -> crate::Result<Vec<IpAddr>> { - tokio::runtime::Runtime::new()? - .block_on(async { addr::get(link).await?.try_collect().await }) + pub fn get(&self, link: String) -> crate::Result<Vec<IpAddr>> { + tokio::runtime::Runtime::new()? + .block_on(async { self.0.address_get(link).await?.try_collect().await }) + } } } #[cfg(feature = "status")] pub mod link { - use crate::link; + use super::Connection; - #[cfg(feature = "link")] - blockify!(set, link::set, link: String, state: bool); - #[cfg(feature = "link")] - blockify!(set_mtu, link::set_mtu, link: String, mtu: u32); - #[cfg(feature = "link")] - blockify!(add_vlan, link::add_vlan, link: String, parent: String, vlan_id: u16); + impl Connection { + #[cfg(feature = "link")] + blockify!(link_set, link: String, state: bool); + #[cfg(feature = "link")] + blockify!(link_set_mtu, link: String, mtu: u32); + #[cfg(feature = "link")] + blockify!(link_add_vlan, link: String, parent: String, vlan_id: u16); - blockify!(is_up -> bool, link::is_up, link: String); - blockify!(wait_up, link::wait_up, link: String); - blockify!(exists -> bool, link::exists, link: String); - blockify!(wait_exists, link::wait_exists, link: String); - blockify!(index -> u32, link::index, link: String); + blockify!(link_is_up -> bool, link: String); + blockify!(link_wait_up, link: String); + blockify!(link_exists -> bool, link: String); + blockify!(link_wait_exists, link: String); + blockify!(link_index -> u32, link: String); + } } #[cfg(feature = "route")] pub mod route { - use crate::route; + use super::Connection; use std::net::{Ipv4Addr, Ipv6Addr}; - blockify!(flush4, route::flush4, link: String); - blockify!(flush6, route::flush6, link: String); - blockify!(flush, route::flush, link: String); - blockify!(add4, route::add4, dst: Ipv4Addr, prefix_len: u8, rtr: Option<Ipv4Addr>, link: String); - blockify!(add6, route::add6, dst: Ipv6Addr, prefix_len: u8, rtr: Option<Ipv6Addr>, link: String); + impl Connection { + blockify!(route_flush4, link: String); + blockify!(route_flush6, link: String); + blockify!(route_flush, link: String); + blockify!(route_add4, dst: Ipv4Addr, prefix_len: u8, rtr: Option<Ipv4Addr>, link: String); + blockify!(route_add6, dst: Ipv6Addr, prefix_len: u8, rtr: Option<Ipv6Addr>, link: String); + } } |