diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2bec2f6..1f6cecc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,7 +19,7 @@ jobs: os: [ubuntu-20.04, windows-latest, macos-latest] steps: - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@1.61.0 + - uses: dtolnay/rust-toolchain@1.63.0 with: components: rustfmt, clippy - name: Run rustfmt and fail if any warnings diff --git a/Cargo.toml b/Cargo.toml index 3fb5a7e..f18312f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ name = "mdns-sd" version = "0.10.4" authors = ["keepsimple "] edition = "2018" -rust-version = "1.61.0" +rust-version = "1.63.0" license = "Apache-2.0 OR MIT" repository = "https://github.com/keepsimple1/mdns-sd" documentation = "https://docs.rs/mdns-sd" @@ -21,7 +21,7 @@ flume = { version = "0.11", default-features = false } # channel between threads if-addrs = { version = "0.10", features = ["link-local"] } # get local IP addresses log = { version = "0.4", optional = true } # logging polling = "2.1" # select/poll sockets -socket2 = { version = "0.4", features = ["all"] } # socket APIs +socket2 = { version = "0.5.5", features = ["all"] } # socket APIs [dev-dependencies] fastrand = "1.8" diff --git a/examples/query.rs b/examples/query.rs index 3f22fd1..04593a1 100644 --- a/examples/query.rs +++ b/examples/query.rs @@ -56,7 +56,7 @@ fn print_usage() { println!("Usage: cargo run --example query "); println!("Example: "); println!("cargo run --example query _my-service._udp"); - println!(""); + println!(); println!("You can also do a meta-query per RFC 6763 to find which services are available:"); println!("cargo run --example query _services._dns-sd._udp"); } diff --git a/examples/register.rs b/examples/register.rs index bcadec1..ff94d4c 100644 --- a/examples/register.rs +++ b/examples/register.rs @@ -19,9 +19,8 @@ fn main() { let args: Vec = env::args().collect(); let mut should_unreg = false; for arg in args.iter() { - match arg.as_str() { - "--unregister" => should_unreg = true, - _ => {} + if arg.as_str() == "--unregister" { + should_unreg = true } } @@ -50,12 +49,12 @@ fn main() { // The key string in TXT properties is case insensitive. Only the first // (key, val) pair will take effect. - let properties = vec![("PATH", "one"), ("Path", "two"), ("PaTh", "three")]; + let properties = [("PATH", "one"), ("Path", "two"), ("PaTh", "three")]; // Register a service. let service_info = ServiceInfo::new( &service_type, - &instance_name, + instance_name, service_hostname, my_addrs, port, @@ -85,12 +84,9 @@ fn main() { // Monitor the daemon events. while let Ok(event) = monitor.recv() { println!("Daemon event: {:?}", &event); - match event { - DaemonEvent::Error(e) => { - println!("Failed: {}", e); - break; - } - _ => {} + if let DaemonEvent::Error(e) = event { + println!("Failed: {}", e); + break; } } } @@ -101,7 +97,7 @@ fn print_usage() { println!("cargo run --example register [--unregister]"); println!("Options:"); println!("--unregister: automatically unregister after 2 seconds"); - println!(""); + println!(); println!("For example:"); println!("cargo run --example register _my-hello._udp test1"); } diff --git a/src/service_daemon.rs b/src/service_daemon.rs index e8ded57..18a2606 100644 --- a/src/service_daemon.rs +++ b/src/service_daemon.rs @@ -85,7 +85,7 @@ pub enum UnregisterStatus { } /// Status code for the service daemon. -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Clone, Eq)] #[non_exhaustive] pub enum DaemonStatus { /// The daemon is running as normal. @@ -2314,9 +2314,9 @@ mod tests { #[test] fn test_instance_name() { - assert_eq!(valid_instance_name("my-laser._printer._tcp.local."), true); - assert_eq!(valid_instance_name("my-laser.._printer._tcp.local."), true); - assert_eq!(valid_instance_name("_printer._tcp.local."), false); + assert!(valid_instance_name("my-laser._printer._tcp.local.")); + assert!(valid_instance_name("my-laser.._printer._tcp.local.")); + assert!(!valid_instance_name("_printer._tcp.local.")); } #[test] diff --git a/src/service_info.rs b/src/service_info.rs index be7ebea..d03acd3 100644 --- a/src/service_info.rs +++ b/src/service_info.rs @@ -743,7 +743,7 @@ mod tests { // test decode let decoded = decode_txt(&encoded); - assert!(&properties[..] == &decoded[..]); + assert!(properties[..] == decoded[..]); // test empty value let properties = vec![TxtProperty::from(&("key3", ""))]; diff --git a/tests/addr_parse.rs b/tests/addr_parse.rs index 831b143..d751d26 100644 --- a/tests/addr_parse.rs +++ b/tests/addr_parse.rs @@ -27,7 +27,7 @@ fn test_addr_str() { // verify that `&String` also works. assert_eq!( - (&addr).as_ip_addrs(), + addr.as_ip_addrs(), Ok({ let mut set = HashSet::new(); set.insert(Ipv4Addr::new(127, 0, 0, 1).into()); @@ -134,7 +134,7 @@ fn test_addr_ip() { ); assert_eq!( - (&ip).as_ip_addrs(), + ip.as_ip_addrs(), Ok({ let mut set = HashSet::new(); set.insert(Ipv4Addr::new(127, 0, 0, 1).into()); diff --git a/tests/mdns_test.rs b/tests/mdns_test.rs index e92a84f..5d3773d 100644 --- a/tests/mdns_test.rs +++ b/tests/mdns_test.rs @@ -211,8 +211,7 @@ fn integration_success() { } }, Err(e) => { - println!("browse error: {}", e); - assert!(false); + panic!("browse error: {}", e); } } } @@ -282,8 +281,7 @@ fn service_without_properties_with_alter_net_v4() { } }, Err(e) => { - println!("browse error: {}", e); - assert!(false); + panic!("browse error: {}", e); } } } @@ -344,7 +342,7 @@ fn service_without_properties_with_alter_net_v6() { if fullname.as_str() == info.get_fullname() { let addrs: Vec<&IpAddr> = info .get_addresses() - .into_iter() + .iter() .filter(|a| a.is_ipv6()) .collect(); assert_eq!(addrs.len(), 1); // first_ipv6 but no alter_ipv. @@ -357,8 +355,7 @@ fn service_without_properties_with_alter_net_v6() { } }, Err(e) => { - println!("browse error: {}", e); - assert!(false); + panic!("browse error: {}", e); } } } @@ -421,7 +418,7 @@ fn service_txt_properties_key_ascii() { assert!(my_service.is_err()); if let Err(e) = my_service { let msg = format!("ERROR: {}", e); - assert!(msg.contains("=")); + assert!(msg.contains('=')); } // Verify that properly formatted keys are OK. @@ -465,7 +462,7 @@ fn service_with_named_interface_only() { my_ty_domain, "my_instance", host_name, - &host_ipv4, + host_ipv4, port, None, ) @@ -479,30 +476,25 @@ fn service_with_named_interface_only() { let timeout = Duration::from_secs(2); let mut resolved = false; - loop { - match browse_chan.recv_timeout(timeout) { - Ok(event) => match event { - ServiceEvent::ServiceResolved(info) => { - let addrs = info.get_addresses(); - resolved = true; - println!( - "Resolved a service of {} addr(s): {:?}", - &info.get_fullname(), - addrs - ); - break; - } - e => { - println!("Received event {:?}", e); - } - }, - Err(_) => { + while let Ok(event) = browse_chan.recv_timeout(timeout) { + match event { + ServiceEvent::ServiceResolved(info) => { + let addrs = info.get_addresses(); + resolved = true; + println!( + "Resolved a service of {} addr(s): {:?}", + &info.get_fullname(), + addrs + ); break; } + e => { + println!("Received event {:?}", e); + } } } - assert!(resolved == false); + assert!(!resolved); // Second, find an interface. let if_addrs: Vec = my_ip_interfaces() @@ -520,26 +512,21 @@ fn service_with_named_interface_only() { let timeout = Duration::from_secs(2); let mut resolved = false; - loop { - match browse_chan.recv_timeout(timeout) { - Ok(event) => match event { - ServiceEvent::ServiceResolved(info) => { - let addrs = info.get_addresses(); - resolved = true; - println!( - "Resolved a service of {} addr(s): {:?}", - &info.get_fullname(), - addrs - ); - break; - } - e => { - println!("Received event {:?}", e); - } - }, - Err(_) => { + while let Ok(event) = browse_chan.recv_timeout(timeout) { + match event { + ServiceEvent::ServiceResolved(info) => { + let addrs = info.get_addresses(); + resolved = true; + println!( + "Resolved a service of {} addr(s): {:?}", + &info.get_fullname(), + addrs + ); break; } + e => { + println!("Received event {:?}", e); + } } } @@ -565,7 +552,7 @@ fn service_with_ipv4_only() { service_ipv4_only, "my_instance", host_name, - &host_ipv4, + host_ipv4, port, None, ) @@ -579,30 +566,25 @@ fn service_with_ipv4_only() { let timeout = Duration::from_secs(2); let mut resolved = false; - loop { - match browse_chan.recv_timeout(timeout) { - Ok(event) => match event { - ServiceEvent::ServiceResolved(info) => { - let addrs = info.get_addresses(); - resolved = true; - println!( - "Resolved a service of {} addr(s): {:?}", - &info.get_fullname(), - addrs - ); - assert!(info.get_addresses().len() > 0); - for addr in info.get_addresses().iter() { - assert!(addr.is_ipv4()); - } - break; + while let Ok(event) = browse_chan.recv_timeout(timeout) { + match event { + ServiceEvent::ServiceResolved(info) => { + let addrs = info.get_addresses(); + resolved = true; + println!( + "Resolved a service of {} addr(s): {:?}", + &info.get_fullname(), + addrs + ); + assert!(!info.get_addresses().is_empty()); + for addr in info.get_addresses().iter() { + assert!(addr.is_ipv4()); } - e => { - println!("Received event {:?}", e); - } - }, - Err(_) => { break; } + e => { + println!("Received event {:?}", e); + } } } @@ -628,7 +610,7 @@ fn service_with_invalid_addr_v4() { let alter_ip = ipv4_alter_net(&if_addrs); let host_name = "my_host."; let port = 5201; - let my_service = ServiceInfo::new(ty_domain, &instance_name, host_name, &alter_ip, port, None) + let my_service = ServiceInfo::new(ty_domain, &instance_name, host_name, alter_ip, port, None) .expect("valid service info"); d.register(my_service) .expect("Failed to register our service"); @@ -664,7 +646,7 @@ fn service_with_invalid_addr_v4() { // We cannot resolve the service because the published address // is not valid in the LAN. - assert_eq!(resolved, false); + assert!(!resolved); } #[test] @@ -685,7 +667,7 @@ fn service_with_invalid_addr_v6() { let alter_ip = ipv6_alter_net(&if_addrs); let host_name = "my_host."; let port = 5201; - let my_service = ServiceInfo::new(ty_domain, &instance_name, host_name, &alter_ip, port, None) + let my_service = ServiceInfo::new(ty_domain, &instance_name, host_name, alter_ip, port, None) .expect("valid service info"); d.register(my_service) .expect("Failed to register our service"); @@ -721,7 +703,7 @@ fn service_with_invalid_addr_v6() { // We cannot resolve the service because the published address // is not valid in the LAN. - assert_eq!(resolved, false); + assert!(!resolved); } #[test] @@ -743,7 +725,7 @@ fn subtype() { subtype_domain, &instance_name, host_name, - &host_ipv4, + host_ipv4, port, None, ) @@ -774,8 +756,7 @@ fn subtype() { } }, Err(e) => { - println!("browse error: {}", e); - assert!(false); + panic!("browse error: {}", e); } } } @@ -799,7 +780,7 @@ fn service_name_check() { service_name_too_long, "my_instance", host_name, - &host_ipv4, + host_ipv4, port, None, ) @@ -811,9 +792,8 @@ fn service_name_check() { // Verify that the daemon reported error. let event = monitor.recv_timeout(Duration::from_millis(500)).unwrap(); assert!(matches!(event, DaemonEvent::Error(_))); - match event { - DaemonEvent::Error(e) => println!("Daemon error: {}", e), - _ => {} + if let DaemonEvent::Error(e) = event { + println!("Daemon error: {}", e) } // Verify that we can increase the service name length max. @@ -842,7 +822,7 @@ fn service_new_publish_after_browser() { sleep(Duration::from_millis(1000)); - let txt_properties = vec![("key1", "value1")]; + let txt_properties = [("key1", "value1")]; let service_info = ServiceInfo::new( "_new-pub._udp.local.", "test1", @@ -907,7 +887,7 @@ fn instance_name_two_dots() { service_type, instance_name, host_name, - &host_ipv4, + host_ipv4, port, None, )