aboutsummaryrefslogtreecommitdiff
path: root/src/blocking.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/blocking.rs')
-rw-r--r--src/blocking.rs84
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);
+ }
}