mod entry;
mod fake;
mod mdns;
mod worker;
#[cfg(feature = "zeroconf")]
mod zeroconf;
use std::sync::mpsc;
pub use entry::{Entry, EntryGroup, EntryId, GroupingMode, decode_dns_sd_escapes, group_entries};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum DiscoveryBackend {
#[default]
MdnsSd,
#[cfg(feature = "zeroconf")]
Zeroconf,
}
#[derive(Debug, Clone)]
pub enum DiscoveryEvent {
Upsert(Entry),
Remove(EntryId),
Status(String),
}
#[derive(Debug, Clone)]
pub struct DiscoveryConfig {
pub fake: bool,
pub backend: DiscoveryBackend,
pub domain: String,
pub service_type: Option<String>,
}
pub trait Discovery {
fn events(&mut self) -> mpsc::Receiver<DiscoveryEvent>;
}
pub fn start(config: &DiscoveryConfig) -> Box<dyn Discovery> {
if config.fake {
return Box::new(fake::FakeDiscovery::start(config));
}
match config.backend {
DiscoveryBackend::MdnsSd => Box::new(mdns::start(config)),
#[cfg(feature = "zeroconf")]
DiscoveryBackend::Zeroconf => Box::new(zeroconf::start(config)),
}
}