use crate::{EventLoop, NetworkInterface, Result, ServiceType, TxtRecord};
use std::any::Any;
use std::sync::Arc;
pub trait TMdnsService {
fn new(service_type: ServiceType, port: u16) -> Self;
fn set_name(&mut self, name: &str);
fn name(&self) -> Option<&str>;
fn set_network_interface(&mut self, interface: NetworkInterface);
fn network_interface(&self) -> NetworkInterface;
fn set_domain(&mut self, domain: &str);
fn domain(&self) -> Option<&str>;
fn set_host(&mut self, _host: &str);
fn host(&self) -> Option<&str>;
fn set_txt_record(&mut self, txt_record: TxtRecord);
fn txt_record(&self) -> Option<&TxtRecord>;
fn set_registered_callback(&mut self, registered_callback: Box<ServiceRegisteredCallback>);
fn set_context(&mut self, context: Box<dyn Any + Send + Sync>);
fn context(&self) -> Option<&(dyn Any + Send + Sync)>;
fn register(&mut self) -> Result<EventLoop>;
}
pub type ServiceRegisteredCallback =
dyn Fn(Result<ServiceRegistration>, Option<Arc<dyn Any + Send + Sync>>) + Send + Sync;
#[derive(Builder, BuilderDelegate, Debug, Getters, Clone, Default, PartialEq, Eq)]
pub struct ServiceRegistration {
name: String,
service_type: ServiceType,
domain: String,
}