use crate::{EventLoop, NetworkInterface, Result, ServiceType, TxtRecord};
use std::any::Any;
use std::sync::Arc;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum BrowserEvent {
Add(ServiceDiscovery),
Remove(ServiceRemoval),
}
pub trait TMdnsBrowser {
fn new(service_type: ServiceType) -> Self;
fn set_network_interface(&mut self, interface: NetworkInterface);
fn network_interface(&self) -> NetworkInterface;
fn set_service_callback(&mut self, service_callback: Box<ServiceBrowserCallback>);
fn set_context(&mut self, context: Box<dyn Any + Send + Sync>);
fn context(&self) -> Option<&(dyn Any + Send + Sync)>;
fn browse_services(&mut self) -> Result<EventLoop>;
}
pub type ServiceBrowserCallback =
dyn Fn(Result<BrowserEvent>, Option<Arc<dyn Any + Send + Sync>>) + Send + Sync;
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug, Getters, Builder, BuilderDelegate, Clone, PartialEq, Eq)]
pub struct ServiceDiscovery {
name: String,
service_type: ServiceType,
domain: String,
host_name: String,
address: String,
port: u16,
txt: Option<TxtRecord>,
}
#[derive(Debug, Getters, Builder, BuilderDelegate, Clone, PartialEq, Eq)]
pub struct ServiceRemoval {
name: String,
kind: String,
domain: String,
}