use auto_discovery::{
config::DiscoveryConfig,
service::ServiceInfo,
types::{ServiceType, ProtocolType},
ServiceDiscovery,
};
use std::time::Duration;
use tracing::info;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt::init();
info!("Starting builder pattern example");
let config = DiscoveryConfig::new()
.with_timeout(Duration::from_secs(30))
.with_verify_services(true)
.with_service_type(ServiceType::new("_http._tcp")?)
.with_protocol(ProtocolType::Mdns)
.with_protocol(ProtocolType::Upnp);
info!("Configuration created with builder pattern");
let discovery = ServiceDiscovery::new(config).await?;
info!("Service discovery created with builder-configured settings");
let service = ServiceInfo::new(
"Builder Example Service",
"_http._tcp",
8080,
Some(vec![
("version", "1.0"),
("api", "REST"),
("build_tool", "builder_pattern"),
])
)?;
info!("Service created: {}", service.name());
discovery.register_service(service.clone()).await?;
info!("Service registered successfully");
let services = discovery.discover_services(Some(ProtocolType::Mdns)).await?;
info!("Discovered {} services using builder-configured discovery", services.len());
for service in services {
info!(" - {} at {}:{}", service.name(), service.address(), service.port());
}
discovery.unregister_service(&service).await?;
info!("Service unregistered");
Ok(())
}