diff --git a/zeroconf/src/browser.rs b/zeroconf/src/browser.rs index 6d526a2..cbfd4dc 100644 --- a/zeroconf/src/browser.rs +++ b/zeroconf/src/browser.rs @@ -3,6 +3,7 @@ use crate::{EventLoop, NetworkInterface, Result, ServiceDiscoveredCallback}; use std::any::Any; +/// Interface for interacting with underlying mDNS implementation service browsing capabilities. pub trait TMdnsBrowser { /// Creates a new `MdnsBrowser` that browses for the specified `kind` (e.g. `_http._tcp`) fn new(kind: &str) -> Self; diff --git a/zeroconf/src/event_loop.rs b/zeroconf/src/event_loop.rs new file mode 100644 index 0000000..8736072 --- /dev/null +++ b/zeroconf/src/event_loop.rs @@ -0,0 +1,11 @@ +//! Trait definition for cross-platform event loop + +use crate::Result; +use std::time::Duration; + +/// A handle on the underlying implementation to poll the event loop. Typically, `poll()` +/// is called in a loop to keep a `MdnsService` or `MdnsBrowser` running. +pub trait TEventLoop { + /// Polls for new events. + fn poll(&self, timeout: Duration) -> Result<()>; +} diff --git a/zeroconf/src/ffi/c_str.rs b/zeroconf/src/ffi/c_str.rs index 5595f85..4babad6 100644 --- a/zeroconf/src/ffi/c_str.rs +++ b/zeroconf/src/ffi/c_str.rs @@ -1,3 +1,5 @@ +//! Utilities related to c-string handling + use libc::c_char; use std::ffi::{CStr, CString}; diff --git a/zeroconf/src/lib.rs b/zeroconf/src/lib.rs index 4ed1f4d..f35db37 100644 --- a/zeroconf/src/lib.rs +++ b/zeroconf/src/lib.rs @@ -142,6 +142,7 @@ mod txt_record; pub mod browser; pub mod builder; pub mod error; +pub mod event_loop; pub mod ffi; pub mod prelude; pub mod service; diff --git a/zeroconf/src/linux/browser.rs b/zeroconf/src/linux/browser.rs index b1c3ff8..08ad78b 100644 --- a/zeroconf/src/linux/browser.rs +++ b/zeroconf/src/linux/browser.rs @@ -1,3 +1,5 @@ +//! Avahi implementation for cross-platform browser + use super::avahi_util; use super::client::{ManagedAvahiClient, ManagedAvahiClientParams}; use super::constants; @@ -22,7 +24,6 @@ use std::ffi::CString; use std::sync::Arc; use std::{fmt, ptr}; -/// Interface for interacting with Avahi's mDNS service browsing capabilities. #[derive(Debug)] pub struct AvahiMdnsBrowser { client: Option>, diff --git a/zeroconf/src/linux/event_loop.rs b/zeroconf/src/linux/event_loop.rs index 8f91395..5e0b1e7 100644 --- a/zeroconf/src/linux/event_loop.rs +++ b/zeroconf/src/linux/event_loop.rs @@ -1,26 +1,22 @@ //! Event loop for running a `MdnsService` or `MdnsBrowser`. use super::poll::ManagedAvahiSimplePoll; +use crate::event_loop::TEventLoop; use crate::Result; use std::sync::Arc; use std::time::Duration; -/// A handle on the underlying Avahi implementation to poll the event loop. Typically `poll()` is -/// called in a loop to keep a [`MdnsService`] or [`MdnsBrowser`] running. -/// -/// [`MdnsService`]: ../../type.MdnsService.html -/// [`MdnsBrowser`]: ../../type.MdnsBrowser.html #[derive(new)] pub struct AvahiEventLoop { poll: Arc, } -impl AvahiEventLoop { +impl TEventLoop for AvahiEventLoop { /// Polls for new events. /// /// Internally calls `ManagedAvahiSimplePoll::iterate(0)`, the `timeout` parameter does not /// currently do anything in the Avahi implementation. - pub fn poll(&self, _timeout: Duration) -> Result<()> { + fn poll(&self, _timeout: Duration) -> Result<()> { self.poll.iterate(0); Ok(()) } diff --git a/zeroconf/src/linux/service.rs b/zeroconf/src/linux/service.rs index 83cdc1e..d704b1f 100644 --- a/zeroconf/src/linux/service.rs +++ b/zeroconf/src/linux/service.rs @@ -1,3 +1,5 @@ +//! Avahi implementation for cross-platform service. + use super::avahi_util; use super::client::{self, ManagedAvahiClient, ManagedAvahiClientParams}; use super::constants; @@ -19,7 +21,6 @@ use std::fmt::{self, Formatter}; use std::ptr; use std::sync::Arc; -/// Interface for interacting with Avahi's mDNS service registration capabilities. #[derive(Debug)] pub struct AvahiMdnsService { client: Option, diff --git a/zeroconf/src/linux/txt_record.rs b/zeroconf/src/linux/txt_record.rs index 2703681..cd6dfb5 100644 --- a/zeroconf/src/linux/txt_record.rs +++ b/zeroconf/src/linux/txt_record.rs @@ -1,3 +1,5 @@ +//! Avahi implementation for cross-platform TXT record. + use super::string_list::{AvahiStringListNode, ManagedAvahiStringList}; use crate::txt_record::TTxtRecord; use crate::Result; diff --git a/zeroconf/src/macos/browser.rs b/zeroconf/src/macos/browser.rs index 10352a6..7def0f2 100644 --- a/zeroconf/src/macos/browser.rs +++ b/zeroconf/src/macos/browser.rs @@ -15,7 +15,6 @@ use std::fmt::{self, Formatter}; use std::ptr; use std::sync::{Arc, Mutex}; -/// Interface for interacting with Bonjour's mDNS service browsing capabilities. #[derive(Debug)] pub struct BonjourMdnsBrowser { service: Arc>, diff --git a/zeroconf/src/macos/event_loop.rs b/zeroconf/src/macos/event_loop.rs index 4a8833a..8ec5733 100644 --- a/zeroconf/src/macos/event_loop.rs +++ b/zeroconf/src/macos/event_loop.rs @@ -1,27 +1,23 @@ //! Event loop for running a `MdnsService` or `MdnsBrowser`. use super::service_ref::ManagedDNSServiceRef; +use crate::event_loop::TEventLoop; use crate::{ffi, Result}; use std::sync::{Arc, Mutex}; use std::time::Duration; -/// A handle on the underlying Bonjour implementation to poll the event loop. Typically, `poll()` -/// is called in a loop to keep a [`MdnsService`] or [`MdnsBrowser`] running. -/// -/// [`MdnsService`]: ../../type.MdnsService.html -/// [`MdnsBrowser`]: ../../type.MdnsBrowser.html #[derive(new)] pub struct BonjourEventLoop { service: Arc>, } -impl BonjourEventLoop { +impl TEventLoop for BonjourEventLoop { /// Polls for new events. /// /// Prior to calling `ManagedDNSServiceRef::process_result()`, this function performs a unix /// `select()` on the underlying socket with the specified timeout. If the socket contains no /// new data, the blocking call is not made. - pub fn poll(&self, timeout: Duration) -> Result<()> { + fn poll(&self, timeout: Duration) -> Result<()> { let service = self.service.lock().unwrap(); let select = unsafe { ffi::read_select(service.sock_fd(), timeout)? }; if select > 0 { diff --git a/zeroconf/src/macos/service.rs b/zeroconf/src/macos/service.rs index 3061fda..fca6635 100644 --- a/zeroconf/src/macos/service.rs +++ b/zeroconf/src/macos/service.rs @@ -13,7 +13,6 @@ use std::any::Any; use std::ffi::CString; use std::sync::{Arc, Mutex}; -/// Interface for interacting with Bonjour's mDNS service registration capabilities. #[derive(Debug)] pub struct BonjourMdnsService { service: Arc>, diff --git a/zeroconf/src/prelude.rs b/zeroconf/src/prelude.rs index cd5eb72..c43d891 100644 --- a/zeroconf/src/prelude.rs +++ b/zeroconf/src/prelude.rs @@ -1,5 +1,6 @@ //! Crate prelude pub use crate::browser::TMdnsBrowser; +pub use crate::event_loop::TEventLoop; pub use crate::service::TMdnsService; pub use crate::txt_record::TTxtRecord; diff --git a/zeroconf/src/service.rs b/zeroconf/src/service.rs index 52be252..82bf60e 100644 --- a/zeroconf/src/service.rs +++ b/zeroconf/src/service.rs @@ -3,6 +3,8 @@ use crate::{EventLoop, NetworkInterface, Result, ServiceRegisteredCallback, TxtRecord}; use std::any::Any; +/// Interface for interacting with underlying mDNS service implementation registration +/// capabilities. pub trait TMdnsService { /// Creates a new `MdnsService` with the specified `kind` (e.g. `_http._tcp`) and `port`. fn new(kind: &str, port: u16) -> Self;