use auto_discovery::{
config::DiscoveryConfig,
service::ServiceInfo,
types::ServiceType,
ServiceDiscovery,
};
use std::net::Ipv4Addr;
use std::time::Duration;
use tracing::info;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt::init();
info!("๐ Simple discovery example starting");
let config = DiscoveryConfig::new()
.with_service_type(ServiceType::new("_test._tcp")?)
.with_timeout(Duration::from_secs(3));
let discovery = ServiceDiscovery::new(config).await?;
info!("โ
Discovery service created");
let service = ServiceInfo::new(
"Simple Test Service",
"_test._tcp",
8080,
Some(vec![
("version", "1.0"),
("status", "running"),
("example", "simple"),
])
)?
.with_address(std::net::IpAddr::V4(Ipv4Addr::LOCALHOST));
info!("๐ Registering service: {}", service.name());
discovery.register_service(service.clone()).await?;
info!("โ
Service registered successfully");
tokio::time::sleep(Duration::from_millis(500)).await;
info!("๐ Discovering services...");
let discovered = discovery.discover_services(None).await?;
if discovered.is_empty() {
info!("๐ญ No services found on the network");
} else {
info!("๐ Found {} service(s):", discovered.len());
for (i, svc) in discovered.iter().enumerate() {
info!(" {}. {} at {}:{}", i + 1, svc.name(), svc.address, svc.port);
if !svc.attributes.is_empty() {
for (key, value) in &svc.attributes {
info!(" {}: {}", key, value);
}
}
}
}
info!("๐งน Unregistering service...");
discovery.unregister_service(&service).await?;
info!("โ
Service unregistered");
info!("๐ Simple discovery example completed");
Ok(())
}