avahi!() macro

Signed-off-by: Walker Crouse <walker.crouse@coop.co.uk>
This commit is contained in:
Walker Crouse 2020-09-28 14:37:21 -04:00
parent 560d33454d
commit 3316b9a0e3
4 changed files with 89 additions and 81 deletions

View File

@ -1,6 +1,5 @@
//! Rust friendly `AvahiEntryGroup` wrappers/helpers
use super::avahi_util;
use crate::Result;
use avahi_sys::{
avahi_entry_group_add_service, avahi_entry_group_commit, avahi_entry_group_free,
@ -60,7 +59,7 @@ impl ManagedAvahiEntryGroup {
port,
}: AddServiceParams,
) -> Result<()> {
let err = unsafe {
avahi!(
avahi_entry_group_add_service(
self.0,
interface,
@ -72,24 +71,11 @@ impl ManagedAvahiEntryGroup {
host,
port,
ptr::null_mut() as *const c_char, // null terminated txt record list
)
};
),
"could not register service"
)?;
if err < 0 {
return Err(format!(
"could not register service: `{}`",
avahi_util::get_error(err)
)
.into());
}
let err = unsafe { avahi_entry_group_commit(self.0) };
if err < 0 {
Err(format!("could not commit service: `{}`", avahi_util::get_error(err)).into())
} else {
Ok(())
}
avahi!(avahi_entry_group_commit(self.0), "could not commit service")
}
/// Delegate function for [`avahi_entry_group_reset()`].

View File

@ -1,6 +1,5 @@
//! Rust friendly `AvahiSimplePoll` wrappers/helpers
use super::avahi_util;
use crate::Result;
use avahi_sys::{
avahi_simple_poll_free, avahi_simple_poll_iterate, avahi_simple_poll_loop,
@ -30,16 +29,10 @@ impl ManagedAvahiSimplePoll {
///
/// [`avahi_simple_poll_loop()`]: https://avahi.org/doxygen/html/simple-watch_8h.html#a14b4cb29832e8c3de609d4c4e5611985
pub fn start_loop(&self) -> Result<()> {
let err = unsafe { avahi_simple_poll_loop(self.0) };
if err != 0 {
Err(format!(
"could not start AvahiSimplePoll: {}",
avahi_util::get_error(err)
)
.into())
} else {
Ok(())
}
avahi!(
avahi_simple_poll_loop(self.0),
"could not start AvahiSimplePoll"
)
}
/// Delegate function for [`avahi_simple_poll_iterate()`].

View File

@ -128,33 +128,35 @@ mod tests {
let key1 = c_string!("foo");
let value1 = c_string!("bar");
list.add_pair(
key1.as_ptr() as *const c_char,
value1.as_ptr() as *const c_char,
);
unsafe {
list.add_pair(
key1.as_ptr() as *const c_char,
value1.as_ptr() as *const c_char,
);
let key2 = c_string!("hello");
let value2 = c_string!("world");
let key2 = c_string!("hello");
let value2 = c_string!("world");
list.add_pair(
key2.as_ptr() as *const c_char,
value2.as_ptr() as *const c_char,
);
list.add_pair(
key2.as_ptr() as *const c_char,
value2.as_ptr() as *const c_char,
);
let pair1 = list
.find(key1.as_ptr() as *const c_char)
.unwrap()
.get_pair();
let pair1 = list
.find(key1.as_ptr() as *const c_char)
.unwrap()
.get_pair();
let pair2 = list
.find(key2.as_ptr() as *const c_char)
.unwrap()
.get_pair();
let pair2 = list
.find(key2.as_ptr() as *const c_char)
.unwrap()
.get_pair();
assert_eq!(pair1.key().as_str(), "foo");
assert_eq!(pair1.value().as_str(), "bar");
assert_eq!(pair2.key().as_str(), "hello");
assert_eq!(pair2.value().as_str(), "world");
assert_eq!(pair1.key().as_str(), "foo");
assert_eq!(pair1.value().as_str(), "bar");
assert_eq!(pair2.key().as_str(), "hello");
assert_eq!(pair2.value().as_str(), "world");
}
}
#[test]
@ -165,25 +167,27 @@ mod tests {
let key = c_string!("foo");
let value = c_string!("bar");
list.add_pair(
key.as_ptr() as *const c_char,
value.as_ptr() as *const c_char,
);
unsafe {
list.add_pair(
key.as_ptr() as *const c_char,
value.as_ptr() as *const c_char,
);
let pair = list.find(key.as_ptr() as *const c_char).unwrap().get_pair();
let pair = list.find(key.as_ptr() as *const c_char).unwrap().get_pair();
assert_eq!(pair.value().as_str(), "bar");
assert_eq!(pair.value().as_str(), "bar");
let value = c_string!("baz");
let value = c_string!("baz");
list.add_pair(
key.as_ptr() as *const c_char,
value.as_ptr() as *const c_char,
);
list.add_pair(
key.as_ptr() as *const c_char,
value.as_ptr() as *const c_char,
);
let pair = list.find(key.as_ptr() as *const c_char).unwrap().get_pair();
let pair = list.find(key.as_ptr() as *const c_char).unwrap().get_pair();
assert_eq!(pair.value().as_str(), "baz");
assert_eq!(pair.value().as_str(), "baz");
}
}
#[test]
@ -194,12 +198,14 @@ mod tests {
let key = c_string!("foo");
let value = c_string!("bar");
list.add_pair(
key.as_ptr() as *const c_char,
value.as_ptr() as *const c_char,
);
unsafe {
list.add_pair(
key.as_ptr() as *const c_char,
value.as_ptr() as *const c_char,
);
assert_eq!(list.length(), 1);
assert_eq!(list.length(), 1);
}
}
#[test]
@ -210,12 +216,14 @@ mod tests {
let key = c_string!("foo");
let value = c_string!("bar");
list.add_pair(
key.as_ptr() as *const c_char,
value.as_ptr() as *const c_char,
);
unsafe {
list.add_pair(
key.as_ptr() as *const c_char,
value.as_ptr() as *const c_char,
);
assert_eq!(list.to_string().as_str(), "\"foo=bar\"");
assert_eq!(list.to_string().as_str(), "\"foo=bar\"");
}
}
#[test]
@ -226,11 +234,13 @@ mod tests {
let key = c_string!("foo");
let value = c_string!("bar");
list.add_pair(
key.as_ptr() as *const c_char,
value.as_ptr() as *const c_char,
);
unsafe {
list.add_pair(
key.as_ptr() as *const c_char,
value.as_ptr() as *const c_char,
);
assert_eq!(list.clone(), list);
assert_eq!(list.clone(), list);
}
}
}

View File

@ -21,7 +21,26 @@ macro_rules! bonjour {
if err != 0 {
crate::Result::Err(format!("{}", format!("{} (code: {})", $msg, err)).into())
} else {
Ok(())
crate::Result::Ok(())
}
}};
}
#[cfg(target_os = "linux")]
macro_rules! avahi {
($call:expr, $msg:expr) => {{
#[allow(unused_unsafe)]
let err = unsafe { $call };
if err < 0 {
crate::Result::Err(
format!(
"{}",
format!("{}: `{}`", $msg, crate::linux::avahi_util::get_error(err))
)
.into(),
)
} else {
crate::Result::Ok(())
}
}};
}