diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c7f72590..7881409e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -162,7 +162,7 @@ jobs: cache-all-crates: true - name: Run clippy - run: cargo clippy --all-features + run: cargo clippy --all-features -- -D warnings test: name: Test diff --git a/examples/custom_executor.rs b/examples/custom_executor.rs index 34ab4748..e4e00a53 100644 --- a/examples/custom_executor.rs +++ b/examples/custom_executor.rs @@ -144,12 +144,10 @@ async fn main() { tokio::select! { _ = executor2.next() => {} _ = litep2p2.next_event() => {}, - event = ping_event_stream2.next() => match event { - Some(PingEvent::Ping { peer, ping }) => tracing::info!( - "ping time with {peer:?}: {ping:?}" - ), - _ => {} - } + event = ping_event_stream2.next() => + if let Some(PingEvent::Ping { peer, ping }) = event { + tracing::info!("ping time with {peer:?}: {ping:?}") + } } } } diff --git a/examples/echo_notification.rs b/examples/echo_notification.rs index 11842257..00d9bade 100644 --- a/examples/echo_notification.rs +++ b/examples/echo_notification.rs @@ -50,10 +50,10 @@ async fn client_event_loop(mut litep2p: Litep2p, mut handle: NotificationHandle, loop { tokio::select! { _ = litep2p.next_event() => {} - event = handle.next() => match event.unwrap() { - NotificationEvent::NotificationStreamOpened { .. } => break, - _ => {}, - } + event = handle.next() => + if let NotificationEvent::NotificationStreamOpened { .. } = event.unwrap() { + break + } } } @@ -61,12 +61,10 @@ async fn client_event_loop(mut litep2p: Litep2p, mut handle: NotificationHandle, loop { tokio::select! { _ = litep2p.next_event() => {} - event = handle.next() => match event.unwrap() { - NotificationEvent::NotificationReceived { peer, notification } => { + event = handle.next() => + if let NotificationEvent::NotificationReceived { peer, notification } = event.unwrap() { println!("received response from server ({peer:?}): {notification:?}"); - } - _ => {}, - }, + }, _ = tokio::time::sleep(Duration::from_secs(3)) => { handle.send_sync_notification(peer, vec![1, 3, 3, 7]).unwrap(); } diff --git a/src/addresses.rs b/src/addresses.rs index 609efbe0..af52e62f 100644 --- a/src/addresses.rs +++ b/src/addresses.rs @@ -33,8 +33,8 @@ use crate::PeerId; /// /// # Note /// -/// - The addresses are reported to the identify protocol and are used by other nodes -/// to establish a connection with the local node. +/// - The addresses are reported to the identify protocol and are used by other nodes to establish a +/// connection with the local node. /// /// - Users must ensure that the addresses are reachable from the network. #[derive(Debug, Clone)] diff --git a/src/codec/identity.rs b/src/codec/identity.rs index 92ea7916..266bff4b 100644 --- a/src/codec/identity.rs +++ b/src/codec/identity.rs @@ -99,7 +99,7 @@ mod tests { #[test] fn decoding_smaller_payloads() { let mut codec = Identity::new(100); - let bytes = vec![3u8; 64]; + let bytes = [3u8; 64]; let mut bytes = BytesMut::from(&bytes[..]); let decoded = codec.decode(&mut bytes); diff --git a/src/crypto/noise/mod.rs b/src/crypto/noise/mod.rs index ae484ff5..2e4b6db0 100644 --- a/src/crypto/noise/mod.rs +++ b/src/crypto/noise/mod.rs @@ -679,9 +679,8 @@ fn parse_and_verify_peer_id( let identity = payload.identity_key.ok_or(NegotiationError::PeerIdMissing)?; let remote_public_key = PublicKey::from_protobuf_encoding(&identity)?; let remote_key_signature = - payload.identity_sig.ok_or(NegotiationError::BadSignature).map_err(|err| { + payload.identity_sig.ok_or(NegotiationError::BadSignature).inspect_err(|_err| { tracing::debug!(target: LOG_TARGET, "payload without signature"); - err })?; let peer_id = PeerId::from_public_key(&remote_public_key); diff --git a/src/mock/substream.rs b/src/mock/substream.rs index 4c52394e..235548d3 100644 --- a/src/mock/substream.rs +++ b/src/mock/substream.rs @@ -102,10 +102,7 @@ impl DummySubstream { impl Sink for DummySubstream { type Error = SubstreamError; - fn poll_ready<'a>( - self: Pin<&mut Self>, - _cx: &mut Context<'a>, - ) -> Poll> { + fn poll_ready(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { Poll::Pending } @@ -113,17 +110,11 @@ impl Sink for DummySubstream { Ok(()) } - fn poll_flush<'a>( - self: Pin<&mut Self>, - _cx: &mut Context<'a>, - ) -> Poll> { + fn poll_flush(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { Poll::Pending } - fn poll_close<'a>( - self: Pin<&mut Self>, - _cx: &mut Context<'a>, - ) -> Poll> { + fn poll_close(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { Poll::Ready(Ok(())) } } @@ -131,9 +122,9 @@ impl Sink for DummySubstream { impl Stream for DummySubstream { type Item = Result; - fn poll_next<'a>( + fn poll_next( self: Pin<&mut Self>, - _cx: &mut Context<'a>, + _cx: &mut Context<'_>, ) -> Poll>> { Poll::Pending } diff --git a/src/multistream_select/dialer_select.rs b/src/multistream_select/dialer_select.rs index ba824c92..0a0970b4 100644 --- a/src/multistream_select/dialer_select.rs +++ b/src/multistream_select/dialer_select.rs @@ -557,7 +557,7 @@ mod tests { futures_ringbuf::Endpoint::pair(100, 100); let server = tokio::spawn(async move { - let protos = vec!["/proto2"]; + let protos = ["/proto2"]; let multistream = b"/multistream/1.0.0\n"; let len = multistream.len(); @@ -638,7 +638,7 @@ mod tests { let (client_connection, mut server_connection) = futures_ringbuf::Endpoint::pair(100, 100); let server = tokio::spawn(async move { - let protos = vec!["/proto2"]; + let protos = ["/proto2"]; let multistream = b"/multistream/1.0.0\n"; let len = multistream.len(); @@ -695,7 +695,7 @@ mod tests { let (client_connection, mut server_connection) = futures_ringbuf::Endpoint::pair(100, 100); let server = tokio::spawn(async move { - let protos = vec!["/proto2"]; + let protos = ["/proto2"]; let multistream = b"/multistream/1.0.0\n"; let len = multistream.len(); @@ -809,7 +809,7 @@ mod tests { // send only header line let mut bytes = BytesMut::with_capacity(32); let message = Message::Header(HeaderLine::V1); - let _ = message.encode(&mut bytes).map_err(|_| Error::InvalidData).unwrap(); + message.encode(&mut bytes).map_err(|_| Error::InvalidData).unwrap(); let (mut dialer_state, _message) = WebRtcDialerState::propose(ProtocolName::from("/13371338/proto/1"), vec![]).unwrap(); @@ -828,7 +828,7 @@ mod tests { Protocol::try_from(&b"/13371338/proto/1"[..]).unwrap(), Protocol::try_from(&b"/sup/proto/1"[..]).unwrap(), ]); - let _ = message.encode(&mut bytes).map_err(|_| Error::InvalidData).unwrap(); + message.encode(&mut bytes).map_err(|_| Error::InvalidData).unwrap(); let (mut dialer_state, _message) = WebRtcDialerState::propose(ProtocolName::from("/13371338/proto/1"), vec![]).unwrap(); @@ -841,12 +841,9 @@ mod tests { #[test] fn negotiate_main_protocol() { - let message = webrtc_encode_multistream_message( - vec![Message::Protocol( - Protocol::try_from(&b"/13371338/proto/1"[..]).unwrap(), - )] - .into_iter(), - ) + let message = webrtc_encode_multistream_message(vec![Message::Protocol( + Protocol::try_from(&b"/13371338/proto/1"[..]).unwrap(), + )]) .unwrap() .freeze(); @@ -857,20 +854,18 @@ mod tests { .unwrap(); match dialer_state.register_response(message.to_vec()) { - Ok(HandshakeResult::Succeeded(negotiated)) => - assert_eq!(negotiated, ProtocolName::from("/13371338/proto/1")), + Ok(HandshakeResult::Succeeded(negotiated)) => { + assert_eq!(negotiated, ProtocolName::from("/13371338/proto/1")) + } event => panic!("invalid event {event:?}"), } } #[test] fn negotiate_fallback_protocol() { - let message = webrtc_encode_multistream_message( - vec![Message::Protocol( - Protocol::try_from(&b"/sup/proto/1"[..]).unwrap(), - )] - .into_iter(), - ) + let message = webrtc_encode_multistream_message(vec![Message::Protocol( + Protocol::try_from(&b"/sup/proto/1"[..]).unwrap(), + )]) .unwrap() .freeze(); @@ -881,8 +876,9 @@ mod tests { .unwrap(); match dialer_state.register_response(message.to_vec()) { - Ok(HandshakeResult::Succeeded(negotiated)) => - assert_eq!(negotiated, ProtocolName::from("/sup/proto/1")), + Ok(HandshakeResult::Succeeded(negotiated)) => { + assert_eq!(negotiated, ProtocolName::from("/sup/proto/1")) + } _ => panic!("invalid event"), } } diff --git a/src/multistream_select/listener_select.rs b/src/multistream_select/listener_select.rs index a3559572..f574005f 100644 --- a/src/multistream_select/listener_select.rs +++ b/src/multistream_select/listener_select.rs @@ -405,20 +405,17 @@ mod tests { #[test] fn webrtc_listener_negotiate_works() { - let mut local_protocols = vec![ + let mut local_protocols = [ ProtocolName::from("/13371338/proto/1"), ProtocolName::from("/sup/proto/1"), ProtocolName::from("/13371338/proto/2"), ProtocolName::from("/13371338/proto/3"), ProtocolName::from("/13371338/proto/4"), ]; - let message = webrtc_encode_multistream_message( - vec![ - Message::Protocol(Protocol::try_from(&b"/13371338/proto/1"[..]).unwrap()), - Message::Protocol(Protocol::try_from(&b"/sup/proto/1"[..]).unwrap()), - ] - .into_iter(), - ) + let message = webrtc_encode_multistream_message(vec![ + Message::Protocol(Protocol::try_from(&b"/13371338/proto/1"[..]).unwrap()), + Message::Protocol(Protocol::try_from(&b"/sup/proto/1"[..]).unwrap()), + ]) .unwrap() .freeze(); @@ -433,7 +430,7 @@ mod tests { #[test] fn invalid_message() { - let mut local_protocols = vec![ + let mut local_protocols = [ ProtocolName::from("/13371338/proto/1"), ProtocolName::from("/sup/proto/1"), ProtocolName::from("/13371338/proto/2"), @@ -455,7 +452,7 @@ mod tests { #[test] fn only_header_line_received() { - let mut local_protocols = vec![ + let mut local_protocols = [ ProtocolName::from("/13371338/proto/1"), ProtocolName::from("/sup/proto/1"), ProtocolName::from("/13371338/proto/2"), @@ -466,7 +463,7 @@ mod tests { // send only header line let mut bytes = BytesMut::with_capacity(32); let message = Message::Header(HeaderLine::V1); - let _ = message.encode(&mut bytes).map_err(|_| Error::InvalidData).unwrap(); + message.encode(&mut bytes).map_err(|_| Error::InvalidData).unwrap(); match webrtc_listener_negotiate(&mut local_protocols.iter(), bytes.freeze()) { Err(error) => assert!(std::matches!( @@ -481,7 +478,7 @@ mod tests { #[test] fn header_line_missing() { - let mut local_protocols = vec![ + let mut local_protocols = [ ProtocolName::from("/13371338/proto/1"), ProtocolName::from("/sup/proto/1"), ProtocolName::from("/13371338/proto/2"), @@ -495,7 +492,7 @@ mod tests { Protocol::try_from(&b"/13371338/proto/1"[..]).unwrap(), Protocol::try_from(&b"/sup/proto/1"[..]).unwrap(), ]); - let _ = message.encode(&mut bytes).map_err(|_| Error::InvalidData).unwrap(); + message.encode(&mut bytes).map_err(|_| Error::InvalidData).unwrap(); match webrtc_listener_negotiate(&mut local_protocols.iter(), bytes.freeze()) { Err(error) => assert!(std::matches!( @@ -510,19 +507,16 @@ mod tests { #[test] fn protocol_not_supported() { - let mut local_protocols = vec![ + let mut local_protocols = [ ProtocolName::from("/13371338/proto/1"), ProtocolName::from("/sup/proto/1"), ProtocolName::from("/13371338/proto/2"), ProtocolName::from("/13371338/proto/3"), ProtocolName::from("/13371338/proto/4"), ]; - let message = webrtc_encode_multistream_message( - vec![Message::Protocol( - Protocol::try_from(&b"/13371339/proto/1"[..]).unwrap(), - )] - .into_iter(), - ) + let message = webrtc_encode_multistream_message(vec![Message::Protocol( + Protocol::try_from(&b"/13371339/proto/1"[..]).unwrap(), + )]) .unwrap() .freeze(); diff --git a/src/peer_id.rs b/src/peer_id.rs index 69a70557..40b80e25 100644 --- a/src/peer_id.rs +++ b/src/peer_id.rs @@ -204,7 +204,7 @@ impl<'de> Deserialize<'de> for PeerId { struct PeerIdVisitor; - impl<'de> Visitor<'de> for PeerIdVisitor { + impl Visitor<'_> for PeerIdVisitor { type Value = PeerId; fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result { diff --git a/src/protocol/connection.rs b/src/protocol/connection.rs index cfb9cfe0..a04e2ec9 100644 --- a/src/protocol/connection.rs +++ b/src/protocol/connection.rs @@ -129,7 +129,7 @@ impl ConnectionHandle { protocol: protocol.clone(), fallback_names, substream_id, - connection_id: self.connection_id.clone(), + connection_id: self.connection_id, permit, }) .map_err(|error| match error { diff --git a/src/protocol/libp2p/identify.rs b/src/protocol/libp2p/identify.rs index 67cbefd3..0a969fda 100644 --- a/src/protocol/libp2p/identify.rs +++ b/src/protocol/libp2p/identify.rs @@ -323,7 +323,7 @@ impl Identify { "outbound substream opened" ); - let local_peer_id = self.local_peer_id.clone(); + let local_peer_id = self.local_peer_id; self.pending_outbound.push(Box::pin(async move { let payload = @@ -484,7 +484,7 @@ mod tests { // Create two instances of litep2p let (mut litep2p1, mut event_stream1, peer1) = create_litep2p(); let (mut litep2p2, mut event_stream2, _peer2) = create_litep2p(); - let litep2p1_address = litep2p1.listen_addresses().into_iter().next().unwrap(); + let litep2p1_address = litep2p1.listen_addresses().next().unwrap(); let multiaddr: Multiaddr = "/ip6/::9/tcp/111".parse().unwrap(); // Litep2p1 is now reporting the new address. diff --git a/src/protocol/libp2p/kademlia/bucket.rs b/src/protocol/libp2p/kademlia/bucket.rs index 5b3d9238..e1b115cf 100644 --- a/src/protocol/libp2p/kademlia/bucket.rs +++ b/src/protocol/libp2p/kademlia/bucket.rs @@ -131,7 +131,7 @@ mod tests { let mut iter = bucket.closest_iter(&target); let mut prev = None; - while let Some(node) = iter.next() { + for node in iter { if let Some(distance) = prev { assert!(distance < target.distance(&node.key)); } @@ -177,7 +177,7 @@ mod tests { let mut prev = None; let mut num_peers = 0usize; - while let Some(node) = iter.next() { + for node in iter { if let Some(distance) = prev { assert!(distance < target.distance(&node.key)); } diff --git a/src/protocol/libp2p/kademlia/executor.rs b/src/protocol/libp2p/kademlia/executor.rs index e94a09f2..28f55947 100644 --- a/src/protocol/libp2p/kademlia/executor.rs +++ b/src/protocol/libp2p/kademlia/executor.rs @@ -94,12 +94,11 @@ impl QueryExecutor { self.futures.push(Box::pin(async move { match tokio::time::timeout(WRITE_TIMEOUT, substream.send_framed(message)).await { // Timeout error. - Err(_) => - return QueryContext { - peer, - query_id: None, - result: QueryResult::Timeout, - }, + Err(_) => QueryContext { + peer, + query_id: None, + result: QueryResult::Timeout, + }, // Writing message to substream failed. Ok(Err(_)) => QueryContext { peer, diff --git a/src/protocol/libp2p/kademlia/mod.rs b/src/protocol/libp2p/kademlia/mod.rs index 2ab8e6e4..95ccc696 100644 --- a/src/protocol/libp2p/kademlia/mod.rs +++ b/src/protocol/libp2p/kademlia/mod.rs @@ -87,6 +87,7 @@ mod schema { /// Peer action. #[derive(Debug, Clone)] +#[allow(clippy::enum_variant_names)] enum PeerAction { /// Send `FIND_NODE` message to peer. SendFindNode(QueryId), @@ -633,9 +634,11 @@ impl Kademlia { // Make sure local provider addresses are up to date. let local_peer_id = self.local_key.clone().into_preimage(); - providers.iter_mut().find(|p| p.peer == local_peer_id).as_mut().map(|p| { + if let Some(p) = + providers.iter_mut().find(|p| p.peer == local_peer_id).as_mut() + { p.addresses = self.service.public_addresses().get_addresses(); - }); + } let closer_peers = self .routing_table diff --git a/src/protocol/libp2p/kademlia/query/find_node.rs b/src/protocol/libp2p/kademlia/query/find_node.rs index 78489438..8163451b 100644 --- a/src/protocol/libp2p/kademlia/query/find_node.rs +++ b/src/protocol/libp2p/kademlia/query/find_node.rs @@ -309,7 +309,7 @@ mod tests { replication_factor: 20, parallelism_factor: 10, query: QueryId(0), - target: Key::new(vec![1, 2, 3].into()), + target: Key::new(vec![1, 2, 3]), } } @@ -498,7 +498,7 @@ mod tests { assert_eq!(context.responses.len(), 1); // Provide different response from peer b with peer d as candidate. - context.register_response(peer_b, vec![peer_to_kad(peer_d.clone())]); + context.register_response(peer_b, vec![peer_to_kad(peer_d)]); assert_eq!(context.pending.len(), 1); assert_eq!(context.queried.len(), 2); assert_eq!(context.responses.len(), 2); diff --git a/src/protocol/libp2p/kademlia/query/get_providers.rs b/src/protocol/libp2p/kademlia/query/get_providers.rs index 5adfda48..d6874bd1 100644 --- a/src/protocol/libp2p/kademlia/query/get_providers.rs +++ b/src/protocol/libp2p/kademlia/query/get_providers.rs @@ -412,7 +412,7 @@ mod tests { // Provide different response from peer b with peer d as candidate. let providers = vec![provider2.clone().into(), provider3.clone().into()]; - let candidates = vec![peer_to_kad(peer_d.clone())]; + let candidates = vec![peer_to_kad(peer_d)]; context.register_response(peer_b, providers, candidates); assert_eq!(context.pending.len(), 1); assert_eq!(context.queried.len(), 2); @@ -464,7 +464,7 @@ mod tests { let target = Key::new(vec![1, 2, 3].into()); let mut peers = (0..10).map(|_| PeerId::random()).collect::>(); - let providers = peers.iter().map(|peer| peer_to_kad(peer.clone())).collect::>(); + let providers = peers.iter().map(|peer| peer_to_kad(*peer)).collect::>(); let found_providers = GetProvidersContext::merge_and_sort_providers(providers, target.clone()); @@ -489,13 +489,12 @@ mod tests { let address4 = multiaddr!(Ip4([1, 1, 1, 1]), Tcp(10000u16)); let address5 = multiaddr!(Ip4([8, 8, 8, 8]), Tcp(10000u16)); - let provider1 = peer_to_kad_with_addresses(peer.clone(), vec![address1.clone()]); + let provider1 = peer_to_kad_with_addresses(peer, vec![address1.clone()]); let provider2 = peer_to_kad_with_addresses( - peer.clone(), + peer, vec![address2.clone(), address3.clone(), address4.clone()], ); - let provider3 = - peer_to_kad_with_addresses(peer.clone(), vec![address4.clone(), address5.clone()]); + let provider3 = peer_to_kad_with_addresses(peer, vec![address4.clone(), address5.clone()]); let providers = vec![provider1, provider2, provider3]; @@ -506,7 +505,7 @@ mod tests { assert_eq!(found_providers.len(), 1); - let addresses = &found_providers.get(0).unwrap().addresses; + let addresses = &found_providers.first().unwrap().addresses; assert_eq!(addresses.len(), 5); assert!(addresses.contains(&address1)); assert!(addresses.contains(&address2)); diff --git a/src/protocol/libp2p/kademlia/query/get_record.rs b/src/protocol/libp2p/kademlia/query/get_record.rs index fd610459..420d34f6 100644 --- a/src/protocol/libp2p/kademlia/query/get_record.rs +++ b/src/protocol/libp2p/kademlia/query/get_record.rs @@ -517,7 +517,7 @@ mod tests { // Provide different response from peer b with peer d as candidate. let record = Record::new(key.clone(), vec![4, 5, 6]); - context.register_response(peer_b, Some(record), vec![peer_to_kad(peer_d.clone())]); + context.register_response(peer_b, Some(record), vec![peer_to_kad(peer_d)]); // Check propagated action. let record = context.next_action().unwrap(); match record { diff --git a/src/protocol/libp2p/kademlia/record.rs b/src/protocol/libp2p/kademlia/record.rs index ebad32d9..322553d4 100644 --- a/src/protocol/libp2p/kademlia/record.rs +++ b/src/protocol/libp2p/kademlia/record.rs @@ -113,7 +113,7 @@ impl Record { /// Checks whether the record is expired w.r.t. the given `Instant`. pub fn is_expired(&self, now: Instant) -> bool { - self.expires.map_or(false, |t| now >= t) + self.expires.is_some_and(|t| now >= t) } } diff --git a/src/protocol/libp2p/kademlia/routing_table.rs b/src/protocol/libp2p/kademlia/routing_table.rs index 18ae825d..e012318e 100644 --- a/src/protocol/libp2p/kademlia/routing_table.rs +++ b/src/protocol/libp2p/kademlia/routing_table.rs @@ -233,7 +233,7 @@ impl RoutingTable { /// Get `limit` closest peers to `target` from the k-buckets. pub fn closest(&mut self, target: &Key, limit: usize) -> Vec { ClosestBucketsIter::new(self.local_key.distance(&target)) - .flat_map(|index| self.buckets[index.get()].closest_iter(&target)) + .flat_map(|index| self.buckets[index.get()].closest_iter(target)) .take(limit) .cloned() .collect() @@ -564,10 +564,8 @@ mod tests { // the implementation and keep it consistent with `libp2p` it's kept as is. There are // virtually no practical consequences of this, because to have bucket 0 populated we have // to encounter two sha256 hash values differing only in one least significant bit. - let expected_buckets = vec![7, 4, 3, 1, 0, 0, 2, 5, 6] - .into_iter() - .chain(8..=255) - .map(|i| BucketIndex(i)); + let expected_buckets = + vec![7, 4, 3, 1, 0, 0, 2, 5, 6].into_iter().chain(8..=255).map(BucketIndex); for expected in expected_buckets { let got = iter.next().unwrap(); assert_eq!(got, expected); @@ -581,7 +579,7 @@ mod tests { let d = Distance(U256::from(0b01011010)); let mut iter = ClosestBucketsIter::new(d); let expected_buckets = - vec![6, 4, 3, 1, 0, 2, 5, 7].into_iter().chain(8..=255).map(|i| BucketIndex(i)); + vec![6, 4, 3, 1, 0, 2, 5, 7].into_iter().chain(8..=255).map(BucketIndex); for expected in expected_buckets { let got = iter.next().unwrap(); assert_eq!(got, expected); diff --git a/src/protocol/libp2p/kademlia/store.rs b/src/protocol/libp2p/kademlia/store.rs index efb39f0f..5f727341 100644 --- a/src/protocol/libp2p/kademlia/store.rs +++ b/src/protocol/libp2p/kademlia/store.rs @@ -95,7 +95,7 @@ impl MemoryStore { let is_expired = self .records .get(key) - .map_or(false, |record| record.is_expired(std::time::Instant::now())); + .is_some_and(|record| record.is_expired(std::time::Instant::now())); if is_expired { self.records.remove(key); @@ -153,7 +153,7 @@ impl MemoryStore { /// /// Returns a non-empty list of providers, if any. pub fn get_providers(&mut self, key: &Key) -> Vec { - let drop_key = self.provider_keys.get_mut(key).map_or(false, |providers| { + let drop_key = self.provider_keys.get_mut(key).is_some_and(|providers| { let now = std::time::Instant::now(); providers.retain(|p| !p.is_expired(now)); @@ -168,7 +168,7 @@ impl MemoryStore { self.provider_keys .get(key) .cloned() - .unwrap_or_else(|| Vec::default()) + .unwrap_or_else(Vec::default) .into_iter() .map(|p| ContentProvider { peer: p.provider, @@ -545,9 +545,9 @@ mod tests { let target = KademliaKey::new(key.clone()); let mut providers = providers; providers.sort_by(|p1, p2| { - KademliaKey::from(p1.peer.clone()) + KademliaKey::from(p1.peer) .distance(&target) - .cmp(&KademliaKey::from(p2.peer.clone()).distance(&target)) + .cmp(&KademliaKey::from(p2.peer).distance(&target)) }); providers }; @@ -603,9 +603,9 @@ mod tests { let target = KademliaKey::new(key.clone()); let mut providers = providers; providers.sort_by(|p1, p2| { - KademliaKey::from(p1.peer.clone()) + KademliaKey::from(p1.peer) .distance(&target) - .cmp(&KademliaKey::from(p2.peer.clone()).distance(&target)) + .cmp(&KademliaKey::from(p2.peer).distance(&target)) }); providers.truncate(10); providers @@ -635,9 +635,9 @@ mod tests { let target = KademliaKey::new(key.clone()); let mut providers = providers; providers.sort_by(|p1, p2| { - KademliaKey::from(p1.peer.clone()) + KademliaKey::from(p1.peer) .distance(&target) - .cmp(&KademliaKey::from(p2.peer.clone()).distance(&target)) + .cmp(&KademliaKey::from(p2.peer).distance(&target)) }); providers }; @@ -681,9 +681,9 @@ mod tests { let target = KademliaKey::new(key.clone()); let mut providers = providers; providers.sort_by(|p1, p2| { - KademliaKey::from(p1.peer.clone()) + KademliaKey::from(p1.peer) .distance(&target) - .cmp(&KademliaKey::from(p2.peer.clone()).distance(&target)) + .cmp(&KademliaKey::from(p2.peer).distance(&target)) }); providers }; diff --git a/src/protocol/libp2p/kademlia/types.rs b/src/protocol/libp2p/kademlia/types.rs index 5c4cbbf6..c71bb878 100644 --- a/src/protocol/libp2p/kademlia/types.rs +++ b/src/protocol/libp2p/kademlia/types.rs @@ -19,6 +19,9 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. +// Note: This is coming from the external construct_uint crate. +#![allow(clippy::manual_div_ceil)] + //! Kademlia types. use crate::{ diff --git a/src/protocol/notification/tests/notification.rs b/src/protocol/notification/tests/notification.rs index dc34f7ec..c1a1a7c2 100644 --- a/src/protocol/notification/tests/notification.rs +++ b/src/protocol/notification/tests/notification.rs @@ -683,7 +683,7 @@ async fn inbound_accepted_outbound_fails_to_open() { state: PeerState::Validating { direction: Direction::Inbound, - outbound: OutboundState::Closed { .. }, + outbound: OutboundState::Closed, inbound: InboundState::ReadingHandshake, .. }, @@ -713,7 +713,7 @@ async fn inbound_accepted_outbound_fails_to_open() { state: PeerState::Validating { direction: Direction::Inbound, - outbound: OutboundState::Closed { .. }, + outbound: OutboundState::Closed, inbound: InboundState::Validating { .. }, .. }, diff --git a/src/protocol/protocol_set.rs b/src/protocol/protocol_set.rs index 0d030193..3993e89a 100644 --- a/src/protocol/protocol_set.rs +++ b/src/protocol/protocol_set.rs @@ -307,7 +307,7 @@ impl ProtocolSet { fallback, direction, substream, - connection_id: self.connection.connection_id().clone(), + connection_id: *self.connection.connection_id(), }; protocol_context diff --git a/src/protocol/request_response/handle.rs b/src/protocol/request_response/handle.rs index 37717f1e..5f1cc162 100644 --- a/src/protocol/request_response/handle.rs +++ b/src/protocol/request_response/handle.rs @@ -94,14 +94,13 @@ impl From for RejectReason { fn from(error: SubstreamError) -> Self { // Convert `ErrorKind::NotConnected` to `RejectReason::ConnectionClosed`. match error { - SubstreamError::IoError(error) if error == ErrorKind::NotConnected => - RejectReason::ConnectionClosed, + SubstreamError::IoError(ErrorKind::NotConnected) => RejectReason::ConnectionClosed, SubstreamError::YamuxError(crate::yamux::ConnectionError::Io(error), _) if error.kind() == ErrorKind::NotConnected => RejectReason::ConnectionClosed, - SubstreamError::NegotiationError(crate::error::NegotiationError::IoError(error)) - if error == ErrorKind::NotConnected => - RejectReason::ConnectionClosed, + SubstreamError::NegotiationError(crate::error::NegotiationError::IoError( + ErrorKind::NotConnected, + )) => RejectReason::ConnectionClosed, SubstreamError::NegotiationError( crate::error::NegotiationError::MultistreamSelectError( crate::multistream_select::NegotiationError::ProtocolError( diff --git a/src/protocol/request_response/mod.rs b/src/protocol/request_response/mod.rs index 0e077c78..d763fa64 100644 --- a/src/protocol/request_response/mod.rs +++ b/src/protocol/request_response/mod.rs @@ -798,7 +798,7 @@ impl RequestResponseProtocol { "failed to open substream", ); - return Err(RequestResponseError::Rejected(error.into())); + Err(RequestResponseError::Rejected(error.into())) } } } diff --git a/src/protocol/transport_service.rs b/src/protocol/transport_service.rs index b9a3241a..4e8bc93a 100644 --- a/src/protocol/transport_service.rs +++ b/src/protocol/transport_service.rs @@ -186,7 +186,9 @@ impl KeepAliveTracker { ); // Wake any pending poll. - self.waker.take().map(|waker| waker.wake()); + if let Some(waker) = self.waker.take() { + waker.wake() + } } } @@ -251,11 +253,9 @@ impl Stream for KeepAliveTracker { "keep-alive timeout triggered", ); self.last_activity.remove(&key); - return Poll::Ready(Some(key)); - } - Poll::Ready(None) | Poll::Pending => { - return Poll::Pending; + Poll::Ready(Some(key)) } + Poll::Ready(None) | Poll::Pending => Poll::Pending, } } } @@ -492,7 +492,7 @@ impl TransportService { .ok_or(SubstreamError::PeerDoesNotExist(peer))? .primary; - let connection_id = connection.connection_id().clone(); + let connection_id = *connection.connection_id(); let permit = connection.try_get_permit().ok_or(SubstreamError::ConnectionClosed)?; let substream_id = diff --git a/src/substream/mod.rs b/src/substream/mod.rs index 303a44e8..f4e9f9a8 100644 --- a/src/substream/mod.rs +++ b/src/substream/mod.rs @@ -419,7 +419,7 @@ impl Substream { match &mut self.substream { #[cfg(test)] SubstreamType::Mock(ref mut substream) => - futures::SinkExt::send(substream, bytes).await.map_err(Into::into), + futures::SinkExt::send(substream, bytes).await, SubstreamType::Tcp(ref mut substream) => match self.codec { ProtocolCodec::Unspecified => panic!("codec is unspecified"), ProtocolCodec::Identity(payload_size) => diff --git a/src/transport/common/listener.rs b/src/transport/common/listener.rs index 150ac61d..a79fe8ae 100644 --- a/src/transport/common/listener.rs +++ b/src/transport/common/listener.rs @@ -286,14 +286,15 @@ impl SocketListener { IpAddr::V4(inner.ip), local_address.port(), )), - (Addr::V6(inner), false) => + (Addr::V6(inner), false) => { match inner.ip.segments().first() { Some(0xfe80) => None, _ => Some(SocketAddr::new( IpAddr::V6(inner.ip), local_address.port(), )), - }, + } + } _ => None, } }) @@ -642,8 +643,7 @@ mod tests { let (mut listener, listen_addresses, _) = SocketListener::new::(vec![address.clone()], true, false); - let Some(Protocol::Tcp(port)) = - listen_addresses.iter().next().unwrap().clone().iter().skip(1).next() + let Some(Protocol::Tcp(port)) = listen_addresses.first().unwrap().clone().iter().nth(1) else { panic!("invalid address"); }; @@ -659,8 +659,7 @@ mod tests { let address: Multiaddr = "/ip6/::1/tcp/0/ws".parse().unwrap(); let (mut listener, listen_addresses, _) = SocketListener::new::(vec![address.clone()], true, false); - let Some(Protocol::Tcp(port)) = - listen_addresses.iter().next().unwrap().clone().iter().skip(1).next() + let Some(Protocol::Tcp(port)) = listen_addresses.first().unwrap().clone().iter().nth(1) else { panic!("invalid address"); }; @@ -677,14 +676,13 @@ mod tests { let address2: Multiaddr = "/ip4/127.0.0.1/tcp/0".parse().unwrap(); let (mut listener, listen_addresses, _) = SocketListener::new::(vec![address1, address2], true, false); - let Some(Protocol::Tcp(port1)) = - listen_addresses.iter().next().unwrap().clone().iter().skip(1).next() + let Some(Protocol::Tcp(port1)) = listen_addresses.first().unwrap().clone().iter().nth(1) else { panic!("invalid address"); }; let Some(Protocol::Tcp(port2)) = - listen_addresses.iter().skip(1).next().unwrap().clone().iter().skip(1).next() + listen_addresses.iter().nth(1).unwrap().clone().iter().nth(1) else { panic!("invalid address"); }; @@ -706,14 +704,13 @@ mod tests { let (mut listener, listen_addresses, _) = SocketListener::new::(vec![address1, address2], true, false); - let Some(Protocol::Tcp(port1)) = - listen_addresses.iter().next().unwrap().clone().iter().skip(1).next() + let Some(Protocol::Tcp(port1)) = listen_addresses.first().unwrap().clone().iter().nth(1) else { panic!("invalid address"); }; let Some(Protocol::Tcp(port2)) = - listen_addresses.iter().skip(1).next().unwrap().clone().iter().skip(1).next() + listen_addresses.iter().nth(1).unwrap().clone().iter().nth(1) else { panic!("invalid address"); }; diff --git a/src/transport/manager/address.rs b/src/transport/manager/address.rs index d61fc416..2c3cb5d0 100644 --- a/src/transport/manager/address.rs +++ b/src/transport/manager/address.rs @@ -428,7 +428,7 @@ mod tests { .collect::>(); store.extend(records); - for record in store.addresses.values().cloned() { + for record in store.addresses.values() { let stored = cloned.get(record.address()).unwrap(); assert_eq!(stored.score(), record.score()); assert_eq!(stored.address(), record.address()); @@ -459,7 +459,7 @@ mod tests { let cloned = records.iter().cloned().collect::>(); store.extend(records.iter().map(|(_, record)| record)); - for record in store.addresses.values().cloned() { + for record in store.addresses.values() { let stored = cloned.get(record.address()).unwrap(); assert_eq!(stored.score(), record.score()); assert_eq!(stored.address(), record.address()); diff --git a/src/transport/manager/handle.rs b/src/transport/manager/handle.rs index 3d05c1c9..70bbfd3b 100644 --- a/src/transport/manager/handle.rs +++ b/src/transport/manager/handle.rs @@ -209,7 +209,7 @@ impl TransportManagerHandle { peer_addresses.insert(address); } else { // Add the provided peer ID to the address. - let address = address.with(Protocol::P2p(multihash::Multihash::from(peer.clone()))); + let address = address.with(Protocol::P2p(multihash::Multihash::from(*peer))); peer_addresses.insert(address); } } @@ -224,15 +224,13 @@ impl TransportManagerHandle { ); let mut peers = self.peers.write(); - let entry = peers.entry(*peer).or_insert_with(|| PeerContext::default()); + let entry = peers.entry(*peer).or_default(); // All addresses should be valid at this point, since the peer ID was either added or // double checked. - entry.addresses.extend( - peer_addresses - .into_iter() - .filter_map(|addr| AddressRecord::from_multiaddr(addr)), - ); + entry + .addresses + .extend(peer_addresses.into_iter().filter_map(AddressRecord::from_multiaddr)); num_added } diff --git a/src/transport/manager/mod.rs b/src/transport/manager/mod.rs index d17fa5db..5fc9e330 100644 --- a/src/transport/manager/mod.rs +++ b/src/transport/manager/mod.rs @@ -451,7 +451,7 @@ impl TransportManager { } let mut peers = self.peers.write(); - let context = peers.entry(peer).or_insert_with(|| PeerContext::default()); + let context = peers.entry(peer).or_default(); // Check if dialing is possible before allocating addresses. match context.state.can_dial() { @@ -597,7 +597,7 @@ impl TransportManager { { let mut peers = self.peers.write(); - let context = peers.entry(remote_peer_id).or_insert_with(|| PeerContext::default()); + let context = peers.entry(remote_peer_id).or_default(); // Keep the provided record around for possible future dials. context.addresses.insert(address_record.clone()); @@ -637,7 +637,7 @@ impl TransportManager { }; // We need a valid context for this peer to keep track of failed addresses. - let context = peers.entry(peer_id).or_insert_with(|| PeerContext::default()); + let context = peers.entry(peer_id).or_default(); context.addresses.insert(AddressRecord::new(&peer_id, address.clone(), score)); } @@ -657,7 +657,7 @@ impl TransportManager { })?; let mut peers = self.peers.write(); - let context = peers.entry(peer).or_insert_with(|| PeerContext::default()); + let context = peers.entry(peer).or_default(); let previous_state = context.state.clone(); if !context.state.on_dial_failure(connection_id) { @@ -698,7 +698,7 @@ impl TransportManager { self.connection_limits.on_connection_closed(connection_id); let mut peers = self.peers.write(); - let context = peers.entry(peer).or_insert_with(|| PeerContext::default()); + let context = peers.entry(peer).or_default(); let previous_state = context.state.clone(); let connection_closed = context.state.on_connection_closed(connection_id); @@ -746,7 +746,7 @@ impl TransportManager { scores::CONNECTION_ESTABLISHED, ); - let context = peers.entry(peer).or_insert_with(|| PeerContext::default()); + let context = peers.entry(peer).or_default(); context.addresses.insert(record); } @@ -755,7 +755,7 @@ impl TransportManager { peer: PeerId, endpoint: &Endpoint, ) -> crate::Result { - self.update_address_on_connection_established(peer, &endpoint); + self.update_address_on_connection_established(peer, endpoint); if let Some(dialed_peer) = self.pending_connections.remove(&endpoint.connection_id()) { if dialed_peer != peer { @@ -784,7 +784,7 @@ impl TransportManager { } let mut peers = self.peers.write(); - let context = peers.entry(peer).or_insert_with(|| PeerContext::default()); + let context = peers.entry(peer).or_default(); let previous_state = context.state.clone(); let connection_accepted = context @@ -860,7 +860,7 @@ impl TransportManager { }; let mut peers = self.peers.write(); - let context = peers.entry(peer).or_insert_with(|| PeerContext::default()); + let context = peers.entry(peer).or_default(); // Keep track of the address. context.addresses.insert(AddressRecord::new( @@ -958,7 +958,7 @@ impl TransportManager { }; let mut peers = self.peers.write(); - let context = peers.entry(peer).or_insert_with(|| PeerContext::default()); + let context = peers.entry(peer).or_default(); let previous_state = context.state.clone(); let last_transport = context.state.on_open_failure(transport); diff --git a/src/transport/manager/peer_state.rs b/src/transport/manager/peer_state.rs index fcdb5330..ec18e918 100644 --- a/src/transport/manager/peer_state.rs +++ b/src/transport/manager/peer_state.rs @@ -155,15 +155,13 @@ impl PeerState { pub fn can_dial(&self) -> StateDialResult { match self { // The peer is already connected, no need to dial again. - Self::Connected { .. } => return StateDialResult::AlreadyConnected, + Self::Connected { .. } => StateDialResult::AlreadyConnected, // The dialing state is already in progress, an event will be emitted later. Self::Dialing { .. } | Self::Opening { .. } | Self::Disconnected { dial_record: Some(_), - } => { - return StateDialResult::DialingInProgress; - } + } => StateDialResult::DialingInProgress, Self::Disconnected { dial_record: None } => StateDialResult::Ok, } @@ -328,7 +326,7 @@ impl PeerState { _ => {} }; - return false; + false } /// Returns `true` if the connection was closed. @@ -393,7 +391,7 @@ impl PeerState { return true; } - return false; + false } _ => false, } diff --git a/src/transport/quic/listener.rs b/src/transport/quic/listener.rs index e8550ffb..77760b62 100644 --- a/src/transport/quic/listener.rs +++ b/src/transport/quic/listener.rs @@ -261,8 +261,7 @@ mod tests { let peer = PeerId::from_public_key(&keypair.public().into()); let (mut listener, listen_addresses) = QuicListener::new(&keypair, vec![address.clone()]).unwrap(); - let Some(Protocol::Udp(port)) = - listen_addresses.iter().next().unwrap().clone().iter().skip(1).next() + let Some(Protocol::Udp(port)) = listen_addresses.first().unwrap().clone().iter().nth(1) else { panic!("invalid address"); }; @@ -303,14 +302,13 @@ mod tests { let (mut listener, listen_addresses) = QuicListener::new(&keypair, vec![address1, address2]).unwrap(); - let Some(Protocol::Udp(port1)) = - listen_addresses.iter().next().unwrap().clone().iter().skip(1).next() + let Some(Protocol::Udp(port1)) = listen_addresses.first().unwrap().clone().iter().nth(1) else { panic!("invalid address"); }; let Some(Protocol::Udp(port2)) = - listen_addresses.iter().skip(1).next().unwrap().clone().iter().skip(1).next() + listen_addresses.iter().nth(1).unwrap().clone().iter().nth(1) else { panic!("invalid address"); }; @@ -378,8 +376,7 @@ mod tests { ) .unwrap(); - let Some(Protocol::Udp(port)) = - listen_addresses.iter().next().unwrap().clone().iter().skip(1).next() + let Some(Protocol::Udp(port)) = listen_addresses.first().unwrap().clone().iter().nth(1) else { panic!("invalid address"); }; diff --git a/src/transport/tcp/connection.rs b/src/transport/tcp/connection.rs index fc030839..8a7806d5 100644 --- a/src/transport/tcp/connection.rs +++ b/src/transport/tcp/connection.rs @@ -812,7 +812,7 @@ mod tests { let address = listener.local_addr().unwrap(); let (Ok(mut dialer), Ok((stream, dialer_address))) = - tokio::join!(TcpStream::connect(address.clone()), listener.accept(),) + tokio::join!(TcpStream::connect(address), listener.accept(),) else { panic!("failed to establish connection"); }; @@ -905,7 +905,7 @@ mod tests { let address = listener.local_addr().unwrap(); let (Ok(dialer), Ok((listener, dialer_address))) = - tokio::join!(TcpStream::connect(address.clone()), listener.accept(),) + tokio::join!(TcpStream::connect(address), listener.accept(),) else { panic!("failed to establish connection"); }; @@ -949,7 +949,7 @@ mod tests { let address = listener.local_addr().unwrap(); let (Ok(dialer), Ok((listener, dialer_address))) = - tokio::join!(TcpStream::connect(address.clone()), listener.accept(),) + tokio::join!(TcpStream::connect(address), listener.accept(),) else { panic!("failed to establish connection"); }; @@ -1091,7 +1091,7 @@ mod tests { let address = listener.local_addr().unwrap(); let (Ok(_dialer), Ok((listener, dialer_address))) = - tokio::join!(TcpStream::connect(address.clone()), listener.accept(),) + tokio::join!(TcpStream::connect(address), listener.accept(),) else { panic!("failed to establish connection"); }; @@ -1131,7 +1131,7 @@ mod tests { let address = listener.local_addr().unwrap(); let (Ok(dialer), Ok((listener, dialer_address))) = - tokio::join!(TcpStream::connect(address.clone()), listener.accept(),) + tokio::join!(TcpStream::connect(address), listener.accept(),) else { panic!("failed to establish connection"); }; @@ -1264,7 +1264,7 @@ mod tests { let address = listener.local_addr().unwrap(); let (Ok(dialer), Ok((listener, dialer_address))) = - tokio::join!(TcpStream::connect(address.clone()), listener.accept()) + tokio::join!(TcpStream::connect(address), listener.accept()) else { panic!("failed to establish connection"); }; diff --git a/src/transport/webrtc/connection.rs b/src/transport/webrtc/connection.rs index 82f4b60b..6c1e5746 100644 --- a/src/transport/webrtc/connection.rs +++ b/src/transport/webrtc/connection.rs @@ -486,7 +486,7 @@ impl WebRtcConnection { }; match state { - ChannelState::InboundOpening => + ChannelState::InboundOpening => { match self.on_inbound_opening_channel_data(channel_id, data).await { Ok((substream_id, handle, permit)) => { self.handles.insert(channel_id, handle); @@ -511,7 +511,8 @@ impl WebRtcConnection { self.channels.insert(channel_id, ChannelState::Closing); self.rtc.direct_api().close_data_channel(channel_id); } - }, + } + } ChannelState::OutboundOpening { context, dialer_state, diff --git a/src/transport/webrtc/substream.rs b/src/transport/webrtc/substream.rs index 7da6afae..2ef3f293 100644 --- a/src/transport/webrtc/substream.rs +++ b/src/transport/webrtc/substream.rs @@ -450,12 +450,12 @@ mod tests { // try to write one more byte but since all available bandwidth // is taken the call will block - futures::future::poll_fn(|cx| { - match Pin::new(&mut substream).poll_write(cx, &vec![0u8; 1]) { + futures::future::poll_fn( + |cx| match Pin::new(&mut substream).poll_write(cx, &[0u8; 1]) { Poll::Pending => Poll::Ready(()), _ => panic!("invalid event"), - } - }) + }, + ) .await; } } diff --git a/src/transport/websocket/connection.rs b/src/transport/websocket/connection.rs index 15d200a0..7c4dd56f 100644 --- a/src/transport/websocket/connection.rs +++ b/src/transport/websocket/connection.rs @@ -647,7 +647,7 @@ mod tests { Keypair::generate(), stream, address.clone(), - peer.clone(), + peer, url, Default::default(), 5, @@ -674,7 +674,7 @@ mod tests { let address = listener.local_addr().unwrap(); let (Ok(dialer), Ok((stream, dialer_address))) = - tokio::join!(TcpStream::connect(address.clone()), listener.accept(),) + tokio::join!(TcpStream::connect(address), listener.accept(),) else { panic!("failed to establish connection"); }; @@ -762,7 +762,7 @@ mod tests { Keypair::generate(), stream, address.clone(), - peer.clone(), + peer, url, Default::default(), 5, @@ -789,7 +789,7 @@ mod tests { let address = listener.local_addr().unwrap(); let (Ok(dialer), Ok((stream, dialer_address))) = - tokio::join!(TcpStream::connect(address.clone()), listener.accept(),) + tokio::join!(TcpStream::connect(address), listener.accept(),) else { panic!("failed to establish connection"); }; @@ -849,7 +849,7 @@ mod tests { let address = listener.local_addr().unwrap(); let (Ok(dialer), Ok((stream, dialer_address))) = - tokio::join!(TcpStream::connect(address.clone()), listener.accept(),) + tokio::join!(TcpStream::connect(address), listener.accept(),) else { panic!("failed to establish connection"); }; @@ -922,7 +922,7 @@ mod tests { let address = listener.local_addr().unwrap(); let (Ok(dialer), Ok((stream, dialer_address))) = - tokio::join!(TcpStream::connect(address.clone()), listener.accept(),) + tokio::join!(TcpStream::connect(address), listener.accept(),) else { panic!("failed to establish connection"); }; @@ -1032,7 +1032,7 @@ mod tests { Keypair::generate(), stream, address.clone(), - peer.clone(), + peer, url, Default::default(), 5, @@ -1057,7 +1057,7 @@ mod tests { let address = listener.local_addr().unwrap(); let (Ok(dialer), Ok((stream, dialer_address))) = - tokio::join!(TcpStream::connect(address.clone()), listener.accept(),) + tokio::join!(TcpStream::connect(address), listener.accept(),) else { panic!("failed to establish connection"); }; @@ -1197,7 +1197,7 @@ mod tests { Keypair::generate(), stream, address.clone(), - peer.clone(), + peer, url, Default::default(), 5, @@ -1224,7 +1224,7 @@ mod tests { let address = listener.local_addr().unwrap(); let (Ok(dialer), Ok((stream, dialer_address))) = - tokio::join!(TcpStream::connect(address.clone()), listener.accept(),) + tokio::join!(TcpStream::connect(address), listener.accept(),) else { panic!("failed to establish connection"); }; @@ -1348,7 +1348,7 @@ mod tests { Keypair::generate(), stream, address.clone(), - peer.clone(), + peer, url, Default::default(), 5, diff --git a/tests/conformance/rust/identify.rs b/tests/conformance/rust/identify.rs index 24af7e19..6bc7b491 100644 --- a/tests/conformance/rust/identify.rs +++ b/tests/conformance/rust/identify.rs @@ -140,18 +140,15 @@ async fn identify_works() { tracing::info!("Listening on {address:?}") } SwarmEvent::Behaviour(MyBehaviourEvent::Ping(_event)) => {}, - SwarmEvent::Behaviour(MyBehaviourEvent::Identify(event)) => match event { - identify::Event::Received { info, .. } => { - libp2p_done = true; + SwarmEvent::Behaviour(MyBehaviourEvent::Identify(event)) => if let identify::Event::Received { info, .. } = event { + libp2p_done = true; - assert_eq!(info.protocol_version, "proto v1"); - assert_eq!(info.agent_version, "litep2p/1.0.0"); + assert_eq!(info.protocol_version, "proto v1"); + assert_eq!(info.agent_version, "litep2p/1.0.0"); - if libp2p_done && litep2p_done { - break - } + if libp2p_done && litep2p_done { + break } - _ => {} } _ => {} } diff --git a/tests/conformance/rust/kademlia.rs b/tests/conformance/rust/kademlia.rs index 5f6e85e3..8c9afbfa 100644 --- a/tests/conformance/rust/kademlia.rs +++ b/tests/conformance/rust/kademlia.rs @@ -170,17 +170,15 @@ async fn find_node() { let _ = kad_handle.find_node(target).await; loop { - match kad_handle.next().await { - Some(KademliaEvent::FindNodeSuccess { - target: query_target, - peers, - .. - }) => { - assert_eq!(target, query_target); - assert!(!peers.is_empty()); - break; - } - _ => {} + if let Some(KademliaEvent::FindNodeSuccess { + target: query_target, + peers, + .. + }) = kad_handle.next().await + { + assert_eq!(target, query_target); + assert!(!peers.is_empty()); + break; } } } @@ -360,11 +358,8 @@ async fn get_record() { loop { tokio::select! { - event = libp2p.select_next_some() => match event { - SwarmEvent::NewListenAddr { address, .. } => { - listen_addr = Some(address); - } - _ => {} + event = libp2p.select_next_some() => if let SwarmEvent::NewListenAddr { address, .. } = event { + listen_addr = Some(address); }, _ = tokio::time::sleep(std::time::Duration::from_secs(1)) => { if counter.load(std::sync::atomic::Ordering::SeqCst) == 3 { @@ -538,7 +533,7 @@ async fn litep2p_get_providers_from_libp2p() { assert_eq!(id, query_id); assert!( matches!(result, QueryResult::StartProviding(Ok(AddProviderOk { key })) - if key == Libp2pRecordKey::from(key.clone())) + if key == key.clone()) ); provider_stored = true; @@ -627,26 +622,23 @@ async fn libp2p_get_providers_from_litep2p() { loop { tokio::select! { event = libp2p.select_next_some() => { - match event { - SwarmEvent::Behaviour(BehaviourEvent::Kad( + if let SwarmEvent::Behaviour(BehaviourEvent::Kad( Libp2pKademliaEvent::OutboundQueryProgressed { id, result, .. }) - ) => { - assert_eq!(id, query_id); - if let QueryResult::GetProviders(Ok( - GetProvidersOk::FoundProviders { key, providers } - )) = result { - assert_eq!(key, original_key.clone().into()); - assert_eq!(providers.len(), 1); - assert!(providers.contains(&litep2p_peerid)); - // It looks like `libp2p` discards the cached provider addresses received - // in `GET_PROVIDERS` response, so we can't check it here. - // The addresses are neither used to extend the `libp2p` routing table. - break - } else { - panic!("invalid query result") - } + ) = event { + assert_eq!(id, query_id); + if let QueryResult::GetProviders(Ok( + GetProvidersOk::FoundProviders { key, providers } + )) = result { + assert_eq!(key, original_key.clone().into()); + assert_eq!(providers.len(), 1); + assert!(providers.contains(&litep2p_peerid)); + // It looks like `libp2p` discards the cached provider addresses received + // in `GET_PROVIDERS` response, so we can't check it here. + // The addresses are neither used to extend the `libp2p` routing table. + break + } else { + panic!("invalid query result") } - _ => {} } } _ = litep2p.next_event() => {} diff --git a/tests/connection/mod.rs b/tests/connection/mod.rs index cbe63a57..d47e19c5 100644 --- a/tests/connection/mod.rs +++ b/tests/connection/mod.rs @@ -1041,7 +1041,7 @@ async fn multiple_listen_addresses( let (mut litep2p3, _event_stream) = make_dummy_litep2p(transport3).await; let addresses: Vec<_> = litep2p1.listen_addresses().cloned().collect(); - let address1 = addresses.get(0).unwrap().clone(); + let address1 = addresses.first().unwrap().clone(); let address2 = addresses.get(1).unwrap().clone(); tokio::spawn(async move { @@ -1421,8 +1421,8 @@ async fn simultaneous_dial_then_redial(transport1: Transport, transport2: Transp let peer1 = *litep2p1.local_peer_id(); let peer2 = *litep2p2.local_peer_id(); - litep2p1.add_known_address(peer2, litep2p2.listen_addresses().into_iter().cloned()); - litep2p2.add_known_address(peer1, litep2p1.listen_addresses().into_iter().cloned()); + litep2p1.add_known_address(peer2, litep2p2.listen_addresses().cloned()); + litep2p2.add_known_address(peer1, litep2p1.listen_addresses().cloned()); let (_, _) = tokio::join!(litep2p1.dial(&peer2), litep2p2.dial(&peer1)); @@ -1431,17 +1431,11 @@ async fn simultaneous_dial_then_redial(transport1: Transport, transport2: Transp while !peer1_open || !peer2_open { tokio::select! { - event = litep2p1.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - peer1_open = true; - } - _ => {}, + event = litep2p1.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + peer1_open = true; }, - event = litep2p2.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - peer2_open = true; - } - _ => {}, + event = litep2p2.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + peer2_open = true; }, } } @@ -1451,17 +1445,11 @@ async fn simultaneous_dial_then_redial(transport1: Transport, transport2: Transp while !peer1_close || !peer2_close { tokio::select! { - event = litep2p1.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionClosed { .. } => { - peer1_close = true; - } - _ => {}, + event = litep2p1.next_event() => if let Litep2pEvent::ConnectionClosed { .. } = event.unwrap() { + peer1_close = true; }, - event = litep2p2.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionClosed { .. } => { - peer2_close = true; - } - _ => {}, + event = litep2p2.next_event() => if let Litep2pEvent::ConnectionClosed { .. } = event.unwrap() { + peer2_close = true; }, } } @@ -1474,24 +1462,17 @@ async fn simultaneous_dial_then_redial(transport1: Transport, transport2: Transp while !peer1_open || !peer2_open { tokio::select! { - event = litep2p1.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - peer1_open = true; - } - _ => {}, + event = litep2p1.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + peer1_open = true; }, - event = litep2p2.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - peer2_open = true; - } - _ => {}, + event = litep2p2.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + peer2_open = true; }, } } }; - match tokio::time::timeout(std::time::Duration::from_secs(10), future).await { - Err(_) => panic!("failed to open notification stream"), - _ => {} + if let Err(_) = tokio::time::timeout(std::time::Duration::from_secs(10), future).await { + panic!("failed to open notification stream") } } diff --git a/tests/custom_executor.rs b/tests/custom_executor.rs index 171219c5..cf275187 100644 --- a/tests/custom_executor.rs +++ b/tests/custom_executor.rs @@ -166,17 +166,11 @@ async fn custom_executor() { loop { tokio::select! { - event = litep2p1.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - litep2p1_connected = true; - } - _ => {}, + event = litep2p1.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + litep2p1_connected = true; }, - event = litep2p2.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - litep2p2_connected = true; - } - _ => {}, + event = litep2p2.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + litep2p2_connected = true; } } diff --git a/tests/protocol/identify.rs b/tests/protocol/identify.rs index a4ed3b7a..c69a0122 100644 --- a/tests/protocol/identify.rs +++ b/tests/protocol/identify.rs @@ -131,17 +131,11 @@ async fn identify_supported(transport1: Transport, transport2: Transport) { while !litep2p1_done || !litep2p2_done { tokio::select! { - event = litep2p1.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionClosed { .. } => { - litep2p1_done = true; - } - _ => {} + event = litep2p1.next_event() => if let Litep2pEvent::ConnectionClosed { .. } = event.unwrap() { + litep2p1_done = true; }, - event = litep2p2.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionClosed { .. } => { - litep2p2_done = true; - } - _ => {} + event = litep2p2.next_event() => if let Litep2pEvent::ConnectionClosed { .. } = event.unwrap() { + litep2p2_done = true; } } } @@ -204,19 +198,13 @@ async fn identify_not_supported(transport1: Transport, transport2: Transport) { while !litep2p1_done || !litep2p2_done { tokio::select! { - event = litep2p1.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - tracing::error!("litep2p1 connection established"); - litep2p1_done = true; - } - _ => {} + event = litep2p1.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + tracing::error!("litep2p1 connection established"); + litep2p1_done = true; }, - event = litep2p2.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - tracing::error!("litep2p2 connection established"); - litep2p2_done = true; - } - _ => {} + event = litep2p2.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + tracing::error!("litep2p2 connection established"); + litep2p2_done = true; } } } @@ -226,19 +214,13 @@ async fn identify_not_supported(transport1: Transport, transport2: Transport) { while !litep2p1_done || !litep2p2_done { tokio::select! { - event = litep2p1.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionClosed { .. } => { - tracing::error!("litep2p1 connection closed"); - litep2p1_done = true; - } - _ => {} + event = litep2p1.next_event() => if let Litep2pEvent::ConnectionClosed { .. } = event.unwrap() { + tracing::error!("litep2p1 connection closed"); + litep2p1_done = true; }, - event = litep2p2.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionClosed { .. } => { - tracing::error!("litep2p2 connection closed"); - litep2p2_done = true; - } - _ => {} + event = litep2p2.next_event() => if let Litep2pEvent::ConnectionClosed { .. } = event.unwrap() { + tracing::error!("litep2p2 connection closed"); + litep2p2_done = true; } } } diff --git a/tests/protocol/kademlia.rs b/tests/protocol/kademlia.rs index 21b8d431..b90cd31d 100644 --- a/tests/protocol/kademlia.rs +++ b/tests/protocol/kademlia.rs @@ -418,25 +418,22 @@ async fn get_record_retrieves_remote_records() { event = litep2p1.next_event() => {} event = litep2p2.next_event() => {} event = kad_handle1.next() => { - match event { - Some(KademliaEvent::QueryFailed { query_id }) => { - // Query failed, but the record was stored locally. - assert_eq!(query_id, query1); - - // Let peer2 know about peer1. - kad_handle2 - .add_known_peer( - *litep2p1.local_peer_id(), - litep2p1.listen_addresses().cloned().collect(), - ) - .await; - - // Let peer2 get record from peer1. - let query_id = kad_handle2 - .get_record(RecordKey::from(vec![1, 2, 3]), Quorum::One).await; - query2 = Some(query_id); - } - _ => {} + if let Some(KademliaEvent::QueryFailed { query_id }) = event { + // Query failed, but the record was stored locally. + assert_eq!(query_id, query1); + + // Let peer2 know about peer1. + kad_handle2 + .add_known_peer( + *litep2p1.local_peer_id(), + litep2p1.listen_addresses().cloned().collect(), + ) + .await; + + // Let peer2 get record from peer1. + let query_id = kad_handle2 + .get_record(RecordKey::from(vec![1, 2, 3]), Quorum::One).await; + query2 = Some(query_id); } } event = kad_handle2.next() => { @@ -720,13 +717,10 @@ async fn provider_added_to_remote_node() { event = litep2p2.next_event() => {} event = kad_handle1.next() => {} event = kad_handle2.next() => { - match event { - Some(KademliaEvent::IncomingProvider { provided_key, provider }) => { - assert_eq!(provided_key, key); - assert_eq!(provider, expected_provider); - break - } - _ => {} + if let Some(KademliaEvent::IncomingProvider { provided_key, provider }) = event { + assert_eq!(provided_key, key); + assert_eq!(provider, expected_provider); + break } } } diff --git a/tests/protocol/notification.rs b/tests/protocol/notification.rs index ae034d49..10bf748c 100644 --- a/tests/protocol/notification.rs +++ b/tests/protocol/notification.rs @@ -54,17 +54,11 @@ async fn connect_peers(litep2p1: &mut Litep2p, litep2p2: &mut Litep2p) { loop { tokio::select! { - event = litep2p1.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - litep2p1_connected = true; - } - _ => {}, + event = litep2p1.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + litep2p1_connected = true; }, - event = litep2p2.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - litep2p2_connected = true; - } - _ => {}, + event = litep2p2.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + litep2p2_connected = true; } } @@ -3958,7 +3952,7 @@ async fn clogged_channel_disconnects_peer(transport1: Transport, transport2: Tra ); // `peer2` is also reported that the substream is closed - match tokio::time::timeout(Duration::from_secs(5), async move { + if let Err(_) = tokio::time::timeout(Duration::from_secs(5), async move { loop { if let Some(NotificationEvent::NotificationStreamClosed { peer }) = handle2.next().await { @@ -3969,7 +3963,6 @@ async fn clogged_channel_disconnects_peer(transport1: Transport, transport2: Tra }) .await { - Err(_) => panic!("timeout"), - Ok(()) => {} + panic!("timeout") } } diff --git a/tests/protocol/request_response.rs b/tests/protocol/request_response.rs index 73b2cc19..208c0ed6 100644 --- a/tests/protocol/request_response.rs +++ b/tests/protocol/request_response.rs @@ -59,17 +59,11 @@ async fn connect_peers(litep2p1: &mut Litep2p, litep2p2: &mut Litep2p) { loop { tokio::select! { - event = litep2p1.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - litep2p1_connected = true; - } - _ => {}, + event = litep2p1.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + litep2p1_connected = true; }, - event = litep2p2.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - litep2p2_connected = true; - } - _ => {}, + event = litep2p2.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + litep2p2_connected = true; } } @@ -1097,26 +1091,17 @@ async fn too_many_pending_requests() { while !litep2p1_closed || !litep2p2_closed || !request_ids.is_empty() { tokio::select! { - event = litep2p1.next_event() => match event { - Some(Litep2pEvent::ConnectionClosed { .. }) => { - litep2p1_closed = true; - } - _ => {} + event = litep2p1.next_event() => if let Some(Litep2pEvent::ConnectionClosed { .. }) = event { + litep2p1_closed = true; }, - event = litep2p2.next_event() => match event { - Some(Litep2pEvent::ConnectionClosed { .. }) => { - litep2p2_closed = true; - } - _ => {} + event = litep2p2.next_event() => if let Some(Litep2pEvent::ConnectionClosed { .. }) = event { + litep2p2_closed = true; }, - event = handle1.next() => match event { - Some(RequestResponseEvent::RequestFailed { + event = handle1.next() => if let Some(RequestResponseEvent::RequestFailed { request_id, .. - }) => { - request_ids.remove(&request_id); - } - _ => {} + }) = event { + request_ids.remove(&request_id); } } } diff --git a/tests/substream.rs b/tests/substream.rs index 01a0fb79..f33a35f8 100644 --- a/tests/substream.rs +++ b/tests/substream.rs @@ -227,14 +227,8 @@ async fn connect_peers(litep2p1: &mut Litep2p, litep2p2: &mut Litep2p) { while !litep2p1_ready && !litep2p2_ready { tokio::select! { - event = litep2p1.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => litep2p1_ready = true, - _ => {} - }, - event = litep2p2.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => litep2p2_ready = true, - _ => {} - }, + event = litep2p1.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { litep2p1_ready = true }, + event = litep2p2.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { litep2p2_ready = true }, } } } diff --git a/tests/user_protocol_2.rs b/tests/user_protocol_2.rs index 1c7e6910..33103652 100644 --- a/tests/user_protocol_2.rs +++ b/tests/user_protocol_2.rs @@ -131,17 +131,11 @@ async fn user_protocol_2() { while !litep2p1_ready && !litep2p2_ready { tokio::select! { - event = litep2p1.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - litep2p1_ready = true; - } - _ => {} + event = litep2p1.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + litep2p1_ready = true; }, - event = litep2p2.next_event() => match event.unwrap() { - Litep2pEvent::ConnectionEstablished { .. } => { - litep2p2_ready = true; - } - _ => {} + event = litep2p2.next_event() => if let Litep2pEvent::ConnectionEstablished { .. } = event.unwrap() { + litep2p2_ready = true; } } }