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
|
//! Rust friendly `AvahiEntryGroup` wrappers/helpers
|
||||||
|
|
||||||
use super::avahi_util;
|
|
||||||
use crate::Result;
|
use crate::Result;
|
||||||
use avahi_sys::{
|
use avahi_sys::{
|
||||||
avahi_entry_group_add_service, avahi_entry_group_commit, avahi_entry_group_free,
|
avahi_entry_group_add_service, avahi_entry_group_commit, avahi_entry_group_free,
|
||||||
@ -60,7 +59,7 @@ impl ManagedAvahiEntryGroup {
|
|||||||
port,
|
port,
|
||||||
}: AddServiceParams,
|
}: AddServiceParams,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let err = unsafe {
|
avahi!(
|
||||||
avahi_entry_group_add_service(
|
avahi_entry_group_add_service(
|
||||||
self.0,
|
self.0,
|
||||||
interface,
|
interface,
|
||||||
@ -72,24 +71,11 @@ impl ManagedAvahiEntryGroup {
|
|||||||
host,
|
host,
|
||||||
port,
|
port,
|
||||||
ptr::null_mut() as *const c_char, // null terminated txt record list
|
ptr::null_mut() as *const c_char, // null terminated txt record list
|
||||||
)
|
),
|
||||||
};
|
"could not register service"
|
||||||
|
)?;
|
||||||
|
|
||||||
if err < 0 {
|
avahi!(avahi_entry_group_commit(self.0), "could not commit service")
|
||||||
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(())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Delegate function for [`avahi_entry_group_reset()`].
|
/// Delegate function for [`avahi_entry_group_reset()`].
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
//! Rust friendly `AvahiSimplePoll` wrappers/helpers
|
//! Rust friendly `AvahiSimplePoll` wrappers/helpers
|
||||||
|
|
||||||
use super::avahi_util;
|
|
||||||
use crate::Result;
|
use crate::Result;
|
||||||
use avahi_sys::{
|
use avahi_sys::{
|
||||||
avahi_simple_poll_free, avahi_simple_poll_iterate, avahi_simple_poll_loop,
|
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
|
/// [`avahi_simple_poll_loop()`]: https://avahi.org/doxygen/html/simple-watch_8h.html#a14b4cb29832e8c3de609d4c4e5611985
|
||||||
pub fn start_loop(&self) -> Result<()> {
|
pub fn start_loop(&self) -> Result<()> {
|
||||||
let err = unsafe { avahi_simple_poll_loop(self.0) };
|
avahi!(
|
||||||
if err != 0 {
|
avahi_simple_poll_loop(self.0),
|
||||||
Err(format!(
|
"could not start AvahiSimplePoll"
|
||||||
"could not start AvahiSimplePoll: {}",
|
|
||||||
avahi_util::get_error(err)
|
|
||||||
)
|
)
|
||||||
.into())
|
|
||||||
} else {
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Delegate function for [`avahi_simple_poll_iterate()`].
|
/// Delegate function for [`avahi_simple_poll_iterate()`].
|
||||||
|
@ -128,6 +128,7 @@ mod tests {
|
|||||||
let key1 = c_string!("foo");
|
let key1 = c_string!("foo");
|
||||||
let value1 = c_string!("bar");
|
let value1 = c_string!("bar");
|
||||||
|
|
||||||
|
unsafe {
|
||||||
list.add_pair(
|
list.add_pair(
|
||||||
key1.as_ptr() as *const c_char,
|
key1.as_ptr() as *const c_char,
|
||||||
value1.as_ptr() as *const c_char,
|
value1.as_ptr() as *const c_char,
|
||||||
@ -156,6 +157,7 @@ mod tests {
|
|||||||
assert_eq!(pair2.key().as_str(), "hello");
|
assert_eq!(pair2.key().as_str(), "hello");
|
||||||
assert_eq!(pair2.value().as_str(), "world");
|
assert_eq!(pair2.value().as_str(), "world");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn add_pair_replaces_success() {
|
fn add_pair_replaces_success() {
|
||||||
@ -165,6 +167,7 @@ mod tests {
|
|||||||
let key = c_string!("foo");
|
let key = c_string!("foo");
|
||||||
let value = c_string!("bar");
|
let value = c_string!("bar");
|
||||||
|
|
||||||
|
unsafe {
|
||||||
list.add_pair(
|
list.add_pair(
|
||||||
key.as_ptr() as *const c_char,
|
key.as_ptr() as *const c_char,
|
||||||
value.as_ptr() as *const c_char,
|
value.as_ptr() as *const c_char,
|
||||||
@ -185,6 +188,7 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(pair.value().as_str(), "baz");
|
assert_eq!(pair.value().as_str(), "baz");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn length_success() {
|
fn length_success() {
|
||||||
@ -194,6 +198,7 @@ mod tests {
|
|||||||
let key = c_string!("foo");
|
let key = c_string!("foo");
|
||||||
let value = c_string!("bar");
|
let value = c_string!("bar");
|
||||||
|
|
||||||
|
unsafe {
|
||||||
list.add_pair(
|
list.add_pair(
|
||||||
key.as_ptr() as *const c_char,
|
key.as_ptr() as *const c_char,
|
||||||
value.as_ptr() as *const c_char,
|
value.as_ptr() as *const c_char,
|
||||||
@ -201,6 +206,7 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(list.length(), 1);
|
assert_eq!(list.length(), 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn to_string_success() {
|
fn to_string_success() {
|
||||||
@ -210,6 +216,7 @@ mod tests {
|
|||||||
let key = c_string!("foo");
|
let key = c_string!("foo");
|
||||||
let value = c_string!("bar");
|
let value = c_string!("bar");
|
||||||
|
|
||||||
|
unsafe {
|
||||||
list.add_pair(
|
list.add_pair(
|
||||||
key.as_ptr() as *const c_char,
|
key.as_ptr() as *const c_char,
|
||||||
value.as_ptr() as *const c_char,
|
value.as_ptr() as *const c_char,
|
||||||
@ -217,6 +224,7 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(list.to_string().as_str(), "\"foo=bar\"");
|
assert_eq!(list.to_string().as_str(), "\"foo=bar\"");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn equals_success() {
|
fn equals_success() {
|
||||||
@ -226,6 +234,7 @@ mod tests {
|
|||||||
let key = c_string!("foo");
|
let key = c_string!("foo");
|
||||||
let value = c_string!("bar");
|
let value = c_string!("bar");
|
||||||
|
|
||||||
|
unsafe {
|
||||||
list.add_pair(
|
list.add_pair(
|
||||||
key.as_ptr() as *const c_char,
|
key.as_ptr() as *const c_char,
|
||||||
value.as_ptr() as *const c_char,
|
value.as_ptr() as *const c_char,
|
||||||
@ -234,3 +243,4 @@ mod tests {
|
|||||||
assert_eq!(list.clone(), list);
|
assert_eq!(list.clone(), list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -21,7 +21,26 @@ macro_rules! bonjour {
|
|||||||
if err != 0 {
|
if err != 0 {
|
||||||
crate::Result::Err(format!("{}", format!("{} (code: {})", $msg, err)).into())
|
crate::Result::Err(format!("{}", format!("{} (code: {})", $msg, err)).into())
|
||||||
} else {
|
} 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