avahi!() macro
Signed-off-by: Walker Crouse <walker.crouse@coop.co.uk>
This commit is contained in:
parent
560d33454d
commit
3316b9a0e3
@ -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()`].
|
||||
|
@ -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()`].
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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(())
|
||||
}
|
||||
}};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user