From b48b2664bf2c1f7754b4c934bada504b7a0b0fdd Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Fri, 19 Apr 2024 18:13:25 +0300 Subject: [PATCH 01/35] Apply easy clippy --fix Signed-off-by: Alexandru Vasile --- examples/custom_protocol.rs | 6 ++---- tests/connection/mod.rs | 6 +++--- tests/connection/protocol_dial_invalid_address.rs | 6 +++--- tests/substream.rs | 2 +- tests/user_protocol.rs | 2 +- tests/user_protocol_2.rs | 2 +- 6 files changed, 11 insertions(+), 13 deletions(-) diff --git a/examples/custom_protocol.rs b/examples/custom_protocol.rs index 6c5b3fe4..d97d889a 100644 --- a/examples/custom_protocol.rs +++ b/examples/custom_protocol.rs @@ -289,11 +289,9 @@ async fn main() { } }); - for message in vec![ - b"hello, world".to_vec(), + for message in [b"hello, world".to_vec(), b"testing 123".to_vec(), - b"goodbye, world".to_vec(), - ] { + b"goodbye, world".to_vec()] { handle1 .cmd_tx .send(CustomProtocolCommand::SendMessage { diff --git a/tests/connection/mod.rs b/tests/connection/mod.rs index 6699706b..cc63334f 100644 --- a/tests/connection/mod.rs +++ b/tests/connection/mod.rs @@ -272,7 +272,7 @@ async fn connect_over_dns() { let peer2 = *litep2p2.local_peer_id(); let address = litep2p2.listen_addresses().next().unwrap().clone(); - let tcp = address.iter().skip(1).next().unwrap(); + let tcp = address.iter().nth(1).unwrap(); let mut new_address = Multiaddr::empty(); new_address.push(Protocol::Dns("localhost".into())); @@ -839,7 +839,7 @@ async fn tcp_dns_resolution() { let mut litep2p2 = Litep2p::new(config2).unwrap(); let address = litep2p2.listen_addresses().next().unwrap().clone(); - let tcp = address.iter().skip(1).next().unwrap(); + let tcp = address.iter().nth(1).unwrap(); let peer2 = *litep2p2.local_peer_id(); let mut new_address = Multiaddr::empty(); @@ -900,7 +900,7 @@ async fn websocket_dns_resolution() { let mut litep2p2 = Litep2p::new(config2).unwrap(); let address = litep2p2.listen_addresses().next().unwrap().clone(); - let tcp = address.iter().skip(1).next().unwrap(); + let tcp = address.iter().nth(1).unwrap(); let peer2 = *litep2p2.local_peer_id(); let mut new_address = Multiaddr::empty(); diff --git a/tests/connection/protocol_dial_invalid_address.rs b/tests/connection/protocol_dial_invalid_address.rs index e836ce33..c4fc7214 100644 --- a/tests/connection/protocol_dial_invalid_address.rs +++ b/tests/connection/protocol_dial_invalid_address.rs @@ -64,7 +64,7 @@ impl UserProtocol for CustomProtocol { } fn codec(&self) -> ProtocolCodec { - self.codec.clone() + self.codec } async fn run(mut self: Box, mut service: TransportService) -> litep2p::Result<()> { @@ -116,7 +116,7 @@ async fn protocol_dial_invalid_dns_address() { } }); - let _ = rx.await.unwrap(); + rx.await.unwrap(); } #[tokio::test] @@ -148,5 +148,5 @@ async fn protocol_dial_peer_id_missing() { } }); - let _ = rx.await.unwrap(); + rx.await.unwrap(); } diff --git a/tests/substream.rs b/tests/substream.rs index 5682195b..c4b50f6c 100644 --- a/tests/substream.rs +++ b/tests/substream.rs @@ -96,7 +96,7 @@ impl UserProtocol for CustomProtocol { } fn codec(&self) -> ProtocolCodec { - self.codec.clone() + self.codec } async fn run(mut self: Box, mut service: TransportService) -> litep2p::Result<()> { diff --git a/tests/user_protocol.rs b/tests/user_protocol.rs index 7ea23428..afd05e5a 100644 --- a/tests/user_protocol.rs +++ b/tests/user_protocol.rs @@ -57,7 +57,7 @@ impl UserProtocol for CustomProtocol { } fn codec(&self) -> ProtocolCodec { - self.codec.clone() + self.codec } async fn run(mut self: Box, mut service: TransportService) -> litep2p::Result<()> { diff --git a/tests/user_protocol_2.rs b/tests/user_protocol_2.rs index d2e0ce6d..1c7e6910 100644 --- a/tests/user_protocol_2.rs +++ b/tests/user_protocol_2.rs @@ -64,7 +64,7 @@ impl UserProtocol for CustomProtocol { } fn codec(&self) -> ProtocolCodec { - self.codec.clone() + self.codec } async fn run(mut self: Box, mut service: TransportService) -> litep2p::Result<()> { From 4de23fb814fbec39860ca1d6f97837c9c299fe91 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Fri, 19 Apr 2024 18:24:02 +0300 Subject: [PATCH 02/35] Manual clippy fix v1 Signed-off-by: Alexandru Vasile --- src/codec/unsigned_varint.rs | 4 ++-- src/crypto/noise/mod.rs | 2 +- src/lib.rs | 4 ++-- src/multistream_select/protocol.rs | 9 ++++----- src/protocol/libp2p/kademlia/config.rs | 6 ++++++ src/transport/manager/mod.rs | 2 +- 6 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/codec/unsigned_varint.rs b/src/codec/unsigned_varint.rs index 0c62070c..566abd0b 100644 --- a/src/codec/unsigned_varint.rs +++ b/src/codec/unsigned_varint.rs @@ -59,14 +59,14 @@ impl UnsignedVarint { let mut bytes = BytesMut::with_capacity(payload.len() + 4); let mut codec = Self::new(None); - codec.encode(payload.into(), &mut bytes)?; + codec.encode(payload, &mut bytes)?; Ok(bytes.into()) } /// Decode `payload` into `BytesMut`. pub fn decode(payload: &mut BytesMut) -> crate::Result { - Ok(UviBytes::::default().decode(payload)?.ok_or(Error::InvalidData)?) + UviBytes::::default().decode(payload)?.ok_or(Error::InvalidData) } } diff --git a/src/crypto/noise/mod.rs b/src/crypto/noise/mod.rs index 558ef839..33d56de7 100644 --- a/src/crypto/noise/mod.rs +++ b/src/crypto/noise/mod.rs @@ -171,7 +171,7 @@ impl NoiseContext { /// Get remote public key from the received Noise payload. // TODO: refactor - pub fn get_remote_public_key(&mut self, reply: &Vec) -> crate::Result { + pub fn get_remote_public_key(&mut self, reply: &[u8]) -> crate::Result { if reply.len() <= 2 { return Err(error::Error::InvalidData); } diff --git a/src/lib.rs b/src/lib.rs index a5cc9e47..edc650a4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -219,7 +219,7 @@ impl Litep2p { ); let main_protocol = - kademlia_config.protocol_names.get(0).expect("protocol name to exist"); + kademlia_config.protocol_names.first().expect("protocol name to exist"); let fallback_names = kademlia_config.protocol_names.iter().skip(1).cloned().collect(); let service = transport_manager.register_protocol( @@ -245,7 +245,7 @@ impl Litep2p { let service = transport_manager.register_protocol( identify_config.protocol.clone(), Vec::new(), - identify_config.codec.clone(), + identify_config.codec, ); identify_config.public = Some(litep2p_config.keypair.public().into()); diff --git a/src/multistream_select/protocol.rs b/src/multistream_select/protocol.rs index cc196b6f..b23df5fc 100644 --- a/src/multistream_select/protocol.rs +++ b/src/multistream_select/protocol.rs @@ -234,16 +234,15 @@ pub fn encode_multistream_message( // encode `/multistream-select/1.0.0` header let mut bytes = BytesMut::with_capacity(32); let message = Message::Header(HeaderLine::V1); - let _ = message.encode(&mut bytes).map_err(|_| Litep2pError::InvalidData)?; + message.encode(&mut bytes).map_err(|_| Litep2pError::InvalidData)?; let mut header = UnsignedVarint::encode(bytes)?; // encode each message for message in messages { let mut proto_bytes = BytesMut::with_capacity(256); - let _ = message.encode(&mut proto_bytes).map_err(|_| Litep2pError::InvalidData)?; - let proto_bytes = UnsignedVarint::encode(proto_bytes)?; - - header.append(&mut proto_bytes.into()); + message.encode(&mut proto_bytes).map_err(|_| Litep2pError::InvalidData)?; + let mut proto_bytes = UnsignedVarint::encode(proto_bytes)?; + header.append(&mut proto_bytes); } Ok(BytesMut::from(&header[..])) diff --git a/src/protocol/libp2p/kademlia/config.rs b/src/protocol/libp2p/kademlia/config.rs index 0b7ca3d8..887c4440 100644 --- a/src/protocol/libp2p/kademlia/config.rs +++ b/src/protocol/libp2p/kademlia/config.rs @@ -122,6 +122,12 @@ pub struct ConfigBuilder { pub(super) protocol_names: Vec, } +impl Default for ConfigBuilder { + fn default() -> Self { + Self::new() + } +} + impl ConfigBuilder { /// Create new [`ConfigBuilder`]. pub fn new() -> Self { diff --git a/src/transport/manager/mod.rs b/src/transport/manager/mod.rs index a125b5f6..26ceba28 100644 --- a/src/transport/manager/mod.rs +++ b/src/transport/manager/mod.rs @@ -1493,7 +1493,7 @@ impl TransportManager { return Some(TransportEvent::ConnectionEstablished { peer, - endpoint: endpoint, + endpoint, }); } Ok(ConnectionEstablishedResult::Reject) => { From 3b62ac5cd8ce3cc701d264819bf7b1c1631c6365 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Fri, 19 Apr 2024 18:29:05 +0300 Subject: [PATCH 03/35] Allow clippy::single_match Signed-off-by: Alexandru Vasile --- src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index edc650a4..1fd28a96 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,6 +18,8 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. +#![allow(clippy::single_match)] + use crate::{ config::Litep2pConfig, protocol::{ @@ -48,8 +50,6 @@ pub use error::Error; pub use peer_id::PeerId; pub use types::protocol::ProtocolName; -// pub use yamux; - pub(crate) mod peer_id; pub mod codec; From b8759aadf661b69b4dff9a8c928f86662201132c Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Fri, 19 Apr 2024 18:44:24 +0300 Subject: [PATCH 04/35] fix: needless return Signed-off-by: Alexandru Vasile --- src/protocol/libp2p/kademlia/executor.rs | 88 +++++++++---------- src/protocol/libp2p/kademlia/mod.rs | 2 +- .../libp2p/kademlia/query/find_many_nodes.rs | 2 +- src/protocol/libp2p/kademlia/query/mod.rs | 2 - src/protocol/libp2p/ping/mod.rs | 8 +- src/protocol/notification/connection.rs | 9 +- src/protocol/notification/handle.rs | 2 +- src/protocol/notification/mod.rs | 9 +- src/protocol/notification/negotiation.rs | 2 +- src/protocol/request_response/handle.rs | 2 +- src/protocol/transport_service.rs | 4 +- src/substream/mod.rs | 2 +- src/transport/manager/handle.rs | 4 +- src/transport/manager/mod.rs | 14 +-- src/transport/mod.rs | 2 +- src/transport/quic/substream.rs | 2 +- src/transport/tcp/connection.rs | 2 +- src/transport/webrtc/mod.rs | 2 +- src/transport/webrtc/opening.rs | 2 +- src/transport/webrtc/util.rs | 2 +- src/transport/websocket/stream.rs | 2 +- 21 files changed, 76 insertions(+), 88 deletions(-) diff --git a/src/protocol/libp2p/kademlia/executor.rs b/src/protocol/libp2p/kademlia/executor.rs index 02701c76..f31a0a95 100644 --- a/src/protocol/libp2p/kademlia/executor.rs +++ b/src/protocol/libp2p/kademlia/executor.rs @@ -88,18 +88,16 @@ impl QueryExecutor { pub fn send_message(&mut self, peer: PeerId, message: Bytes, mut substream: Substream) { self.futures.push(Box::pin(async move { match substream.send_framed(message).await { - Ok(_) => - return QueryContext { - peer, - query_id: None, - result: QueryResult::SendSuccess { substream }, - }, - Err(_) => - return QueryContext { - peer, - query_id: None, - result: QueryResult::SubstreamClosed, - }, + Ok(_) => QueryContext { + peer, + query_id: None, + result: QueryResult::SendSuccess { substream }, + }, + Err(_) => QueryContext { + peer, + query_id: None, + result: QueryResult::SubstreamClosed, + }, } })); } @@ -113,24 +111,21 @@ impl QueryExecutor { ) { self.futures.push(Box::pin(async move { match tokio::time::timeout(READ_TIMEOUT, substream.next()).await { - Err(_) => - return QueryContext { - peer, - query_id, - result: QueryResult::Timeout, - }, - Ok(Some(Ok(message))) => - return QueryContext { - peer, - query_id, - result: QueryResult::ReadSuccess { substream, message }, - }, - Ok(None) | Ok(Some(Err(_))) => - return QueryContext { - peer, - query_id, - result: QueryResult::SubstreamClosed, - }, + Err(_) => QueryContext { + peer, + query_id, + result: QueryResult::Timeout, + }, + Ok(Some(Ok(message))) => QueryContext { + peer, + query_id, + result: QueryResult::ReadSuccess { substream, message }, + }, + Ok(None) | Ok(Some(Err(_))) => QueryContext { + peer, + query_id, + result: QueryResult::SubstreamClosed, + }, } })); } @@ -154,24 +149,21 @@ impl QueryExecutor { } match tokio::time::timeout(READ_TIMEOUT, substream.next()).await { - Err(_) => - return QueryContext { - peer, - query_id, - result: QueryResult::Timeout, - }, - Ok(Some(Ok(message))) => - return QueryContext { - peer, - query_id, - result: QueryResult::ReadSuccess { substream, message }, - }, - Ok(None) | Ok(Some(Err(_))) => - return QueryContext { - peer, - query_id, - result: QueryResult::SubstreamClosed, - }, + Err(_) => QueryContext { + peer, + query_id, + result: QueryResult::Timeout, + }, + Ok(Some(Ok(message))) => QueryContext { + peer, + query_id, + result: QueryResult::ReadSuccess { substream, message }, + }, + Ok(None) | Ok(Some(Err(_))) => QueryContext { + peer, + query_id, + result: QueryResult::SubstreamClosed, + }, } })); } diff --git a/src/protocol/libp2p/kademlia/mod.rs b/src/protocol/libp2p/kademlia/mod.rs index ed21dfb4..d26eff05 100644 --- a/src/protocol/libp2p/kademlia/mod.rs +++ b/src/protocol/libp2p/kademlia/mod.rs @@ -222,7 +222,7 @@ impl Kademlia { entry.insert(context); Ok(()) } - Entry::Occupied(_) => return Err(Error::PeerAlreadyExists(peer)), + Entry::Occupied(_) => Err(Error::PeerAlreadyExists(peer)), } } diff --git a/src/protocol/libp2p/kademlia/query/find_many_nodes.rs b/src/protocol/libp2p/kademlia/query/find_many_nodes.rs index ac61e93c..28ab973f 100644 --- a/src/protocol/libp2p/kademlia/query/find_many_nodes.rs +++ b/src/protocol/libp2p/kademlia/query/find_many_nodes.rs @@ -60,6 +60,6 @@ impl FindManyNodesContext { /// Get next action for a `FIND_NODE` query. pub fn next_action(&mut self) -> Option { - return Some(QueryAction::QuerySucceeded { query: self.query }); + Some(QueryAction::QuerySucceeded { query: self.query }) } } diff --git a/src/protocol/libp2p/kademlia/query/mod.rs b/src/protocol/libp2p/kademlia/query/mod.rs index 4bba3e1b..43dc2409 100644 --- a/src/protocol/libp2p/kademlia/query/mod.rs +++ b/src/protocol/libp2p/kademlia/query/mod.rs @@ -310,7 +310,6 @@ impl QueryEngine { match self.queries.get_mut(&query) { None => { tracing::trace!(target: LOG_TARGET, ?query, ?peer, "response failure for a stale query"); - return; } Some(QueryType::FindNode { context }) => { context.register_response_failure(peer); @@ -334,7 +333,6 @@ impl QueryEngine { match self.queries.get_mut(&query) { None => { tracing::trace!(target: LOG_TARGET, ?query, ?peer, "response failure for a stale query"); - return; } Some(QueryType::FindNode { context }) => match message { KademliaMessage::FindNode { peers, .. } => { diff --git a/src/protocol/libp2p/ping/mod.rs b/src/protocol/libp2p/ping/mod.rs index 4700030d..f585d49c 100644 --- a/src/protocol/libp2p/ping/mod.rs +++ b/src/protocol/libp2p/ping/mod.rs @@ -137,8 +137,8 @@ impl Ping { }; match tokio::time::timeout(Duration::from_secs(10), future).await { - Err(_) => return Err(Error::Timeout), - Ok(Err(error)) => return Err(error), + Err(_) => Err(Error::Timeout), + Ok(Err(error)) => Err(error), Ok(Ok(elapsed)) => Ok((peer, elapsed)), } })); @@ -161,8 +161,8 @@ impl Ping { }; match tokio::time::timeout(Duration::from_secs(10), future).await { - Err(_) => return Err(Error::Timeout), - Ok(Err(error)) => return Err(error), + Err(_) => Err(Error::Timeout), + Ok(Err(error)) => Err(error), Ok(Ok(())) => Ok(()), } })); diff --git a/src/protocol/notification/connection.rs b/src/protocol/notification/connection.rs index 819f305d..4c140d2b 100644 --- a/src/protocol/notification/connection.rs +++ b/src/protocol/notification/connection.rs @@ -261,12 +261,11 @@ impl Stream for Connection { } match futures::ready!(this.inbound.poll_next_unpin(cx)) { - None | Some(Err(_)) => - return Poll::Ready(Some(ConnectionEvent::CloseConnection { - notify: NotifyProtocol::Yes, - })), + None | Some(Err(_)) => Poll::Ready(Some(ConnectionEvent::CloseConnection { + notify: NotifyProtocol::Yes, + })), Some(Ok(notification)) => - return Poll::Ready(Some(ConnectionEvent::NotificationReceived { notification })), + Poll::Ready(Some(ConnectionEvent::NotificationReceived { notification })), } } } diff --git a/src/protocol/notification/handle.rs b/src/protocol/notification/handle.rs index 31fd03fc..abdb5e40 100644 --- a/src/protocol/notification/handle.rs +++ b/src/protocol/notification/handle.rs @@ -403,7 +403,7 @@ impl NotificationHandle { Some(sink) => match sink.send_sync_notification(notification) { Ok(()) => Ok(()), Err(error) => match error { - NotificationError::NoConnection => return Err(NotificationError::NoConnection), + NotificationError::NoConnection => Err(NotificationError::NoConnection), NotificationError::ChannelClogged => { let _ = self.clogged.insert(peer).then(|| { self.command_tx.try_send(NotificationCommand::ForceClose { peer }) diff --git a/src/protocol/notification/mod.rs b/src/protocol/notification/mod.rs index b820c68f..64e44667 100644 --- a/src/protocol/notification/mod.rs +++ b/src/protocol/notification/mod.rs @@ -1604,7 +1604,7 @@ impl NotificationProtocol { /// Handle next notification event. async fn next_event(&mut self) { // biased select is used because the substream events must be prioritized above other events - // that is becaused a closed substream is detected by either `substreams` or `negotiation` + // that is because a closed substream is detected by either `substreams` or `negotiation` // and if that event is not handled with priority but, e.g., inbound substream is // handled before, it can create a situation where the state machine gets confused // about the peer's state. @@ -1616,7 +1616,7 @@ impl NotificationProtocol { self.on_handshake_event(peer, event).await; } event = self.shutdown_rx.recv() => match event { - None => return, + None => (), Some(peer) => { if let Some(context) = self.peers.get_mut(&peer) { tracing::trace!( @@ -1704,7 +1704,7 @@ impl NotificationProtocol { ), } } - None => return, + None => (), }, event = self.service.next() => match event { Some(TransportEvent::ConnectionEstablished { peer, .. }) => { @@ -1762,7 +1762,7 @@ impl NotificationProtocol { self.on_substream_open_failure(substream, error).await; } Some(TransportEvent::DialFailure { peer, address }) => self.on_dial_failure(peer, address).await, - None => return, + None => (), }, result = self.pending_validations.select_next_some(), if !self.pending_validations.is_empty() => { if let Err(error) = self.on_validation_result(result.0, result.1).await { @@ -1778,7 +1778,6 @@ impl NotificationProtocol { command = self.command_rx.recv() => match command { None => { tracing::debug!(target: LOG_TARGET, "user protocol has exited, exiting"); - return } Some(command) => match command { NotificationCommand::OpenSubstream { peers } => { diff --git a/src/protocol/notification/negotiation.rs b/src/protocol/notification/negotiation.rs index e76fe40a..8d238dfe 100644 --- a/src/protocol/notification/negotiation.rs +++ b/src/protocol/notification/negotiation.rs @@ -196,7 +196,7 @@ impl HandshakeService { } } - return None; + None } } diff --git a/src/protocol/request_response/handle.rs b/src/protocol/request_response/handle.rs index f1802fae..3d1cfe9b 100644 --- a/src/protocol/request_response/handle.rs +++ b/src/protocol/request_response/handle.rs @@ -483,7 +483,7 @@ impl futures::Stream for RequestResponseHandle { fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { match futures::ready!(self.event_rx.poll_recv(cx)) { - None => return Poll::Ready(None), + None => Poll::Ready(None), Some(event) => match event { InnerRequestResponseEvent::RequestReceived { peer, diff --git a/src/protocol/transport_service.rs b/src/protocol/transport_service.rs index ae8aabb2..9302f42a 100644 --- a/src/protocol/transport_service.rs +++ b/src/protocol/transport_service.rs @@ -254,7 +254,7 @@ impl TransportService { "secondary connection closed", ); - return None; + None } connection_state => { tracing::debug!( @@ -265,7 +265,7 @@ impl TransportService { "connection closed but it doesn't exist", ); - return None; + None } } } diff --git a/src/substream/mod.rs b/src/substream/mod.rs index 8818ac55..7bb2ad1e 100644 --- a/src/substream/mod.rs +++ b/src/substream/mod.rs @@ -700,7 +700,7 @@ impl Sink for Substream { ProtocolCodec::Unspecified => panic!("codec is unspecified"), } - return Ok(()); + Ok(()) } fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { diff --git a/src/transport/manager/handle.rs b/src/transport/manager/handle.rs index c732296c..6fa9f1c3 100644 --- a/src/transport/manager/handle.rs +++ b/src/transport/manager/handle.rs @@ -120,7 +120,7 @@ impl TransportManagerHandle { } match iter.next() { - None => return false, + None => false, Some(Protocol::Tcp(_)) => match ( iter.next(), self.supported_transport.contains(&SupportedTransport::WebSocket), @@ -129,7 +129,7 @@ impl TransportManagerHandle { (Some(Protocol::Wss(_)), true) => true, (Some(Protocol::P2p(_)), _) => self.supported_transport.contains(&SupportedTransport::Tcp), - _ => return false, + _ => false, }, Some(Protocol::Udp(_)) => match ( iter.next(), diff --git a/src/transport/manager/mod.rs b/src/transport/manager/mod.rs index 26ceba28..3a42e443 100644 --- a/src/transport/manager/mod.rs +++ b/src/transport/manager/mod.rs @@ -798,10 +798,10 @@ impl TransportManager { dial_record: actual_dial_record, }; - return Ok(Some(TransportEvent::ConnectionClosed { + Ok(Some(TransportEvent::ConnectionClosed { peer, connection_id, - })); + })) } Some(secondary_connection) => { context.addresses.insert(record); @@ -810,7 +810,7 @@ impl TransportManager { dial_record: actual_dial_record, }; - return Ok(None); + Ok(None) } }, // secondary connection was closed @@ -845,7 +845,7 @@ impl TransportManager { record, dial_record: actual_dial_record, }; - return Ok(None); + Ok(None) } None => { tracing::warn!( @@ -856,7 +856,7 @@ impl TransportManager { ); debug_assert!(false); - return Err(Error::InvalidState); + Err(Error::InvalidState) } }, }, @@ -873,7 +873,7 @@ impl TransportManager { debug_assert!(false); context.state = PeerState::Disconnected { dial_record }; - return Err(Error::InvalidState); + Err(Error::InvalidState) } None => { context.state = PeerState::Disconnected { dial_record }; @@ -887,7 +887,7 @@ impl TransportManager { state => { tracing::warn!(target: LOG_TARGET, ?peer, ?connection_id, ?state, "invalid state for a closed connection"); debug_assert!(false); - return Err(Error::InvalidState); + Err(Error::InvalidState) } } } diff --git a/src/transport/mod.rs b/src/transport/mod.rs index 16f53c63..43025913 100644 --- a/src/transport/mod.rs +++ b/src/transport/mod.rs @@ -101,7 +101,7 @@ impl Endpoint { /// Is this a listener endpoint? pub fn is_listener(&self) -> bool { - return std::matches!(self, Self::Listener { .. }); + std::matches!(self, Self::Listener { .. }) } } diff --git a/src/transport/quic/substream.rs b/src/transport/quic/substream.rs index 826888b3..19da25c0 100644 --- a/src/transport/quic/substream.rs +++ b/src/transport/quic/substream.rs @@ -76,7 +76,7 @@ impl Substream { self.bandwidth_sink.increase_outbound(nwritten); Ok(()) } - Err(error) => return Err(error), + Err(error) => Err(error), } } } diff --git a/src/transport/tcp/connection.rs b/src/transport/tcp/connection.rs index 50fc0550..ac19d404 100644 --- a/src/transport/tcp/connection.rs +++ b/src/transport/tcp/connection.rs @@ -327,7 +327,7 @@ impl TcpConnection { }) .await { - Err(_) => return Err(Error::Timeout), + Err(_) => Err(Error::Timeout), Ok(result) => result, } } diff --git a/src/transport/webrtc/mod.rs b/src/transport/webrtc/mod.rs index b0192d65..834659f9 100644 --- a/src/transport/webrtc/mod.rs +++ b/src/transport/webrtc/mod.rs @@ -701,7 +701,7 @@ impl Stream for WebRtcTransport { } } - return pending_event; + pending_event }) .collect::>(); diff --git a/src/transport/webrtc/opening.rs b/src/transport/webrtc/opening.rs index e4e39ea9..f4e254a6 100644 --- a/src/transport/webrtc/opening.rs +++ b/src/transport/webrtc/opening.rs @@ -341,7 +341,7 @@ impl OpeningWebRtcConnection { peer = ?self.peer_address, "input rejected", ); - return Err(Error::InputRejected); + Err(Error::InputRejected) } } } diff --git a/src/transport/webrtc/util.rs b/src/transport/webrtc/util.rs index 82939d73..951434b8 100644 --- a/src/transport/webrtc/util.rs +++ b/src/transport/webrtc/util.rs @@ -83,7 +83,7 @@ impl WebRtcMessage { payload: message.message, flags: message.flag, }), - Err(_) => return Err(Error::InvalidData), + Err(_) => Err(Error::InvalidData), } } } diff --git a/src/transport/websocket/stream.rs b/src/transport/websocket/stream.rs index 2705c302..ad24122e 100644 --- a/src/transport/websocket/stream.rs +++ b/src/transport/websocket/stream.rs @@ -141,7 +141,7 @@ impl futures::AsyncWrite for BufferedStream, cx: &mut Context<'_>) -> Poll> { match futures::ready!(self.stream.poll_close_unpin(cx)) { Ok(_) => Poll::Ready(Ok(())), - Err(_) => return Poll::Ready(Err(std::io::ErrorKind::PermissionDenied.into())), + Err(_) => Poll::Ready(Err(std::io::ErrorKind::PermissionDenied.into())), } } } From 6fca218139ac213bf4fe9b4af483a973a5b614a3 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Fri, 19 Apr 2024 18:46:41 +0300 Subject: [PATCH 05/35] fix: needless borrow Signed-off-by: Alexandru Vasile --- src/protocol/protocol_set.rs | 2 +- src/transport/manager/handle.rs | 4 ++-- src/transport/manager/mod.rs | 2 +- src/transport/mod.rs | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/protocol/protocol_set.rs b/src/protocol/protocol_set.rs index 1988d95a..80735ab7 100644 --- a/src/protocol/protocol_set.rs +++ b/src/protocol/protocol_set.rs @@ -302,7 +302,7 @@ impl ProtocolSet { // NOTE: `protocol` must exist in `self.protocol` as it was negotiated // using the protocols from this set self.protocols - .get(self.fallback_names.get(&protocol).map_or(protocol, |protocol| protocol)) + .get(self.fallback_names.get(protocol).map_or(protocol, |protocol| protocol)) .expect("protocol to exist") .codec } diff --git a/src/transport/manager/handle.rs b/src/transport/manager/handle.rs index 6fa9f1c3..6c1c807c 100644 --- a/src/transport/manager/handle.rs +++ b/src/transport/manager/handle.rs @@ -189,7 +189,7 @@ impl TransportManagerHandle { "add known addresses", ); - match peers.get_mut(&peer) { + match peers.get_mut(peer) { Some(context) => for record in addresses { if !context.addresses.contains(record.address()) { @@ -220,7 +220,7 @@ impl TransportManagerHandle { } { - match self.peers.read().get(&peer) { + match self.peers.read().get(peer) { Some(PeerContext { state: PeerState::Connected { .. }, .. diff --git a/src/transport/manager/mod.rs b/src/transport/manager/mod.rs index 3a42e443..2d2e2b1c 100644 --- a/src/transport/manager/mod.rs +++ b/src/transport/manager/mod.rs @@ -1176,7 +1176,7 @@ impl TransportManager { for transport in transports.iter() { let _ = self .transports - .get_mut(&transport) + .get_mut(transport) .expect("transport to exist") .cancel(connection_id); } diff --git a/src/transport/mod.rs b/src/transport/mod.rs index 43025913..93e4025c 100644 --- a/src/transport/mod.rs +++ b/src/transport/mod.rs @@ -70,8 +70,8 @@ impl Endpoint { /// Get `Multiaddr` of the [`Endpoint`]. pub fn address(&self) -> &Multiaddr { match self { - Self::Dialer { address, .. } => &address, - Self::Listener { address, .. } => &address, + Self::Dialer { address, .. } => address, + Self::Listener { address, .. } => address, } } From 9d05c3811832e579f6f58952d5b0a09e592d5b2b Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Fri, 19 Apr 2024 18:48:51 +0300 Subject: [PATCH 06/35] fix: needless lifetime Signed-off-by: Alexandru Vasile --- src/protocol/libp2p/kademlia/bucket.rs | 2 +- src/protocol/libp2p/kademlia/routing_table.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/protocol/libp2p/kademlia/bucket.rs b/src/protocol/libp2p/kademlia/bucket.rs index 88fd9266..211db298 100644 --- a/src/protocol/libp2p/kademlia/bucket.rs +++ b/src/protocol/libp2p/kademlia/bucket.rs @@ -70,7 +70,7 @@ impl KBucket { /// Get entry into the bucket. // TODO: this is horrible code - pub fn entry<'a, K: Clone>(&'a mut self, key: Key) -> KBucketEntry<'a> { + pub fn entry(&mut self, key: Key) -> KBucketEntry<'_> { for i in 0..self.nodes.len() { if &self.nodes[i].key == &key { return KBucketEntry::Occupied(&mut self.nodes[i]); diff --git a/src/protocol/libp2p/kademlia/routing_table.rs b/src/protocol/libp2p/kademlia/routing_table.rs index 0077c861..7ac9fe7b 100644 --- a/src/protocol/libp2p/kademlia/routing_table.rs +++ b/src/protocol/libp2p/kademlia/routing_table.rs @@ -112,7 +112,7 @@ impl RoutingTable { } /// Get an entry for `peer` into a k-bucket. - pub fn entry<'a>(&'a mut self, key: Key) -> KBucketEntry<'a> { + pub fn entry(&mut self, key: Key) -> KBucketEntry<'_> { let Some(index) = BucketIndex::new(&self.local_key.distance(&key)) else { return KBucketEntry::LocalNode; }; From c602692f2262ad2cf7f5aa5a3762a5da483eb231 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Fri, 19 Apr 2024 18:49:28 +0300 Subject: [PATCH 07/35] fix: needless question mark Signed-off-by: Alexandru Vasile --- src/crypto/noise/mod.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/crypto/noise/mod.rs b/src/crypto/noise/mod.rs index 33d56de7..a0a65c7b 100644 --- a/src/crypto/noise/mod.rs +++ b/src/crypto/noise/mod.rs @@ -192,10 +192,8 @@ impl NoiseContext { let payload = handshake_schema::NoiseHandshakePayload::decode(inner.as_slice())?; - Ok(PublicKey::from_protobuf_encoding( - &payload.identity_key.ok_or(error::Error::NegotiationError( - error::NegotiationError::PeerIdMissing, - ))?, + PublicKey::from_protobuf_encoding(&payload.identity_key.ok_or( + error::Error::NegotiationError(error::NegotiationError::PeerIdMissing), )?) } From f29ca90447c220a2fd2e78c350e89da1ab5b697a Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:06:51 +0300 Subject: [PATCH 08/35] fix: large_enum_variant Signed-off-by: Alexandru Vasile --- src/crypto/noise/mod.rs | 1 + src/error.rs | 1 + src/lib.rs | 1 + 3 files changed, 3 insertions(+) diff --git a/src/crypto/noise/mod.rs b/src/crypto/noise/mod.rs index a0a65c7b..83a5b690 100644 --- a/src/crypto/noise/mod.rs +++ b/src/crypto/noise/mod.rs @@ -73,6 +73,7 @@ pub const MAX_FRAME_LEN: usize = MAX_NOISE_MSG_LEN - NOISE_EXTRA_ENCRYPT_SPACE; const LOG_TARGET: &str = "litep2p::crypto::noise"; #[derive(Debug)] +#[allow(clippy::large_enum_variant)] enum NoiseState { Handshake(HandshakeState), Transport(TransportState), diff --git a/src/error.rs b/src/error.rs index f0aae799..7dfef70d 100644 --- a/src/error.rs +++ b/src/error.rs @@ -37,6 +37,7 @@ use multihash::{Multihash, MultihashGeneric}; use std::io::{self, ErrorKind}; +#[allow(clippy::large_enum_variant)] #[derive(Debug, thiserror::Error)] pub enum Error { #[error("Peer `{0}` does not exist")] diff --git a/src/lib.rs b/src/lib.rs index 1fd28a96..3d56ff8a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,6 +19,7 @@ // DEALINGS IN THE SOFTWARE. #![allow(clippy::single_match)] +#![allow(clippy::result_large_err)] use crate::{ config::Litep2pConfig, From 9db7302167877ec7fdeac2c8d46a3f5c6f5a1d5a Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:10:26 +0300 Subject: [PATCH 09/35] fix: new_without_default Signed-off-by: Alexandru Vasile --- src/config.rs | 6 ++++++ src/protocol/libp2p/ping/config.rs | 6 ++++++ src/types.rs | 12 ++++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/config.rs b/src/config.rs index 4b5df79b..570be398 100644 --- a/src/config.rs +++ b/src/config.rs @@ -111,6 +111,12 @@ pub struct ConfigBuilder { max_parallel_dials: usize, } +impl Default for ConfigBuilder { + fn default() -> Self { + Self::new() + } +} + impl ConfigBuilder { /// Create empty [`ConfigBuilder`]. pub fn new() -> Self { diff --git a/src/protocol/libp2p/ping/config.rs b/src/protocol/libp2p/ping/config.rs index ba507b20..085f2542 100644 --- a/src/protocol/libp2p/ping/config.rs +++ b/src/protocol/libp2p/ping/config.rs @@ -82,6 +82,12 @@ pub struct ConfigBuilder { max_failures: usize, } +impl Default for ConfigBuilder { + fn default() -> Self { + Self::new() + } +} + impl ConfigBuilder { /// Create new default [`Config`] which can be modified by the user. pub fn new() -> Self { diff --git a/src/types.rs b/src/types.rs index 5b125129..252e8542 100644 --- a/src/types.rs +++ b/src/types.rs @@ -28,6 +28,12 @@ pub mod protocol; #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub struct SubstreamId(usize); +impl Default for SubstreamId { + fn default() -> Self { + Self::new() + } +} + impl SubstreamId { /// Create new [`SubstreamId`]. pub fn new() -> Self { @@ -67,6 +73,12 @@ impl ConnectionId { } } +impl Default for ConnectionId { + fn default() -> Self { + Self::new() + } +} + impl From for ConnectionId { fn from(value: usize) -> Self { ConnectionId(value) From d98e1573837b063bfa46333c94f58a4bcb34d8ca Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:13:40 +0300 Subject: [PATCH 10/35] fix: redundant_closure Signed-off-by: Alexandru Vasile --- src/multistream_select/dialer_select.rs | 2 +- src/transport/webrtc/connection.rs | 6 +++--- src/transport/webrtc/opening.rs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/multistream_select/dialer_select.rs b/src/multistream_select/dialer_select.rs index 9a65ef2b..934fba91 100644 --- a/src/multistream_select/dialer_select.rs +++ b/src/multistream_select/dialer_select.rs @@ -274,7 +274,7 @@ impl DialerState { std::iter::once(protocol.clone()) .chain(fallback_names.clone()) .filter_map(|protocol| Protocol::try_from(protocol.as_ref()).ok()) - .map(|protocol| Message::Protocol(protocol)), + .map(Message::Protocol), )? .freeze() .to_vec(); diff --git a/src/transport/webrtc/connection.rs b/src/transport/webrtc/connection.rs index ef820000..ae3453b3 100644 --- a/src/transport/webrtc/connection.rs +++ b/src/transport/webrtc/connection.rs @@ -267,7 +267,7 @@ impl WebRtcConnection { .channel(channel_id) .ok_or(Error::ChannelDoesntExist)? .write(true, message.as_ref()) - .map_err(|error| Error::WebRtc(error))?; + .map_err(Error::WebRtc)?; self.channels.insert( channel_id, @@ -327,7 +327,7 @@ impl WebRtcConnection { .channel(channel_id) .ok_or(Error::ChannelDoesntExist)? .write(true, WebRtcMessage::encode(response.to_vec()).as_ref()) - .map_err(|error| Error::WebRtc(error))?; + .map_err(Error::WebRtc)?; let protocol = negotiated.ok_or(Error::SubstreamDoesntExist)?; let substream_id = self.protocol_set.next_substream_id(); @@ -600,7 +600,7 @@ impl WebRtcConnection { .channel(channel_id) .ok_or(Error::ChannelDoesntExist)? .write(true, WebRtcMessage::encode(data).as_ref()) - .map_err(|error| Error::WebRtc(error)) + .map_err(Error::WebRtc) .map(|_| ()) } diff --git a/src/transport/webrtc/opening.rs b/src/transport/webrtc/opening.rs index f4e254a6..6c44e0b6 100644 --- a/src/transport/webrtc/opening.rs +++ b/src/transport/webrtc/opening.rs @@ -213,7 +213,7 @@ impl OpeningWebRtcConnection { .channel(self.noise_channel_id) .ok_or(Error::ChannelDoesntExist)? .write(true, payload.as_slice()) - .map_err(|error| Error::WebRtc(error))?; + .map_err(Error::WebRtc)?; self.state = State::HandshakeSent { context }; Ok(()) @@ -306,7 +306,7 @@ impl OpeningWebRtcConnection { let mut channel = self.rtc.channel(self.noise_channel_id).ok_or(Error::ChannelDoesntExist)?; - channel.write(true, payload.as_slice()).map_err(|error| Error::WebRtc(error))?; + channel.write(true, payload.as_slice()).map_err(Error::WebRtc)?; self.rtc.direct_api().close_data_channel(self.noise_channel_id); Ok(self.rtc) From 838589b45dd253da62bcbb5e69a5df8e2d6e24e0 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:16:45 +0300 Subject: [PATCH 11/35] fix: needless into Signed-off-by: Alexandru Vasile --- src/protocol/libp2p/identify.rs | 6 +----- src/protocol/notification/mod.rs | 15 ++------------- src/transport/manager/address.rs | 2 +- src/transport/manager/handle.rs | 2 +- src/transport/tcp/mod.rs | 2 +- src/transport/websocket/mod.rs | 2 +- src/transport/websocket/stream.rs | 2 +- src/yamux/connection.rs | 2 +- 8 files changed, 9 insertions(+), 24 deletions(-) diff --git a/src/protocol/libp2p/identify.rs b/src/protocol/libp2p/identify.rs index dc02ed62..8daadc2c 100644 --- a/src/protocol/libp2p/identify.rs +++ b/src/protocol/libp2p/identify.rs @@ -209,11 +209,7 @@ impl Identify { service, tx: config.tx_event, peers: HashMap::new(), - listen_addresses: config - .public_addresses - .into_iter() - .chain(listen_addresses.into_iter()) - .collect(), + listen_addresses: config.public_addresses.into_iter().chain(listen_addresses).collect(), public: config.public.expect("public key to be supplied"), protocol_version: config.protocol_version, user_agent: config.user_agent.unwrap_or(DEFAULT_AGENT.to_string()), diff --git a/src/protocol/notification/mod.rs b/src/protocol/notification/mod.rs index 64e44667..76f610ba 100644 --- a/src/protocol/notification/mod.rs +++ b/src/protocol/notification/mod.rs @@ -1400,13 +1400,7 @@ impl NotificationProtocol { })); self.event_handle - .report_inbound_substream( - protocol, - fallback, - peer, - handshake.into(), - tx, - ) + .report_inbound_substream(protocol, fallback, peer, handshake, tx) .await; } PeerState::Validating { @@ -1529,12 +1523,7 @@ impl NotificationProtocol { context.state = PeerState::Open { shutdown }; self.event_handle .report_notification_stream_opened( - protocol, - fallback, - direction, - peer, - handshake.into(), - sink, + protocol, fallback, direction, peer, handshake, sink, ) .await; diff --git a/src/transport/manager/address.rs b/src/transport/manager/address.rs index 5ff527a3..6cf2cad1 100644 --- a/src/transport/manager/address.rs +++ b/src/transport/manager/address.rs @@ -145,7 +145,7 @@ impl FromIterator for AddressStore { let mut store = AddressStore::new(); for address in iter { if let Some(address) = AddressRecord::from_multiaddr(address) { - store.insert(address.into()); + store.insert(address); } } diff --git a/src/transport/manager/handle.rs b/src/transport/manager/handle.rs index 6c1c807c..833308ea 100644 --- a/src/transport/manager/handle.rs +++ b/src/transport/manager/handle.rs @@ -201,7 +201,7 @@ impl TransportManagerHandle { *peer, PeerContext { state: PeerState::Disconnected { dial_record: None }, - addresses: AddressStore::from_iter(addresses.into_iter()), + addresses: AddressStore::from_iter(addresses), secondary_connection: None, }, ); diff --git a/src/transport/tcp/mod.rs b/src/transport/tcp/mod.rs index 0936a946..862d5b63 100644 --- a/src/transport/tcp/mod.rs +++ b/src/transport/tcp/mod.rs @@ -221,7 +221,7 @@ impl TcpTransport { Ok(()) => {} Err(err) if err.raw_os_error() == Some(libc::EINPROGRESS) => {} Err(err) if err.kind() == std::io::ErrorKind::WouldBlock => {} - Err(err) => return Err(err.into()), + Err(err) => return Err(err), } let stream = TcpStream::try_from(Into::::into(socket))?; diff --git a/src/transport/websocket/mod.rs b/src/transport/websocket/mod.rs index 35a4ce58..99f3ef3d 100644 --- a/src/transport/websocket/mod.rs +++ b/src/transport/websocket/mod.rs @@ -289,7 +289,7 @@ impl WebSocketTransport { match tokio::time::timeout(connection_open_timeout, future).await { Err(_) => Err(Error::Timeout), - Ok(Err(error)) => Err(error.into()), + Ok(Err(error)) => Err(error), Ok(Ok((address, stream))) => Ok((address, stream)), } } diff --git a/src/transport/websocket/stream.rs b/src/transport/websocket/stream.rs index ad24122e..268d39e1 100644 --- a/src/transport/websocket/stream.rs +++ b/src/transport/websocket/stream.rs @@ -175,7 +175,7 @@ impl futures::AsyncRead for BufferedStream // TODO: this can't be correct if !buffer.is_empty() || bytes_read != 0 { - return Poll::Ready(Ok(bytes_read.into())); + return Poll::Ready(Ok(bytes_read)); } else { self.read_buffer.take(); } diff --git a/src/yamux/connection.rs b/src/yamux/connection.rs index 6ae85009..f6ba5b39 100644 --- a/src/yamux/connection.rs +++ b/src/yamux/connection.rs @@ -472,7 +472,7 @@ impl Active { match self.stream_receivers.poll_next_unpin(cx) { Poll::Ready(Some((_, Some(StreamCommand::SendFrame(frame))))) => { - self.on_send_frame(frame.into()); + self.on_send_frame(frame); continue; } Poll::Ready(Some((id, Some(StreamCommand::CloseStream { ack })))) => { From 78ec193c1deeac551fe481dc4391b281c4efdcac Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:19:11 +0300 Subject: [PATCH 12/35] fix: let_unit_value Signed-off-by: Alexandru Vasile --- src/crypto/noise/mod.rs | 6 +++--- src/protocol/libp2p/ping/mod.rs | 2 +- src/transport/manager/mod.rs | 3 +-- src/transport/webrtc/substream.rs | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/crypto/noise/mod.rs b/src/crypto/noise/mod.rs index 83a5b690..1c04e1e8 100644 --- a/src/crypto/noise/mod.rs +++ b/src/crypto/noise/mod.rs @@ -690,7 +690,7 @@ pub async fn handshake( // write initial message let first_message = noise.first_message(Role::Dialer); let _ = io.write(&first_message).await?; - let _ = io.flush().await?; + io.flush().await?; // read back response which contains the remote peer id let message = noise.read_handshake_message(&mut io).await?; @@ -698,7 +698,7 @@ pub async fn handshake( // send the final message which contains local peer id let second_message = noise.second_message(); let _ = io.write(&second_message).await?; - let _ = io.flush().await?; + io.flush().await?; parse_peer_id(&message)? } @@ -709,7 +709,7 @@ pub async fn handshake( // send local peer id. let second_message = noise.second_message(); let _ = io.write(&second_message).await?; - let _ = io.flush().await?; + io.flush().await?; // read remote's second message which contains their peer id let message = noise.read_handshake_message(&mut io).await?; diff --git a/src/protocol/libp2p/ping/mod.rs b/src/protocol/libp2p/ping/mod.rs index f585d49c..5d07fb28 100644 --- a/src/protocol/libp2p/ping/mod.rs +++ b/src/protocol/libp2p/ping/mod.rs @@ -126,7 +126,7 @@ impl Ping { self.pending_outbound.push(Box::pin(async move { let future = async move { // TODO: generate random payload and verify it - let _ = substream.send_framed(vec![0u8; 32].into()).await?; + substream.send_framed(vec![0u8; 32].into()).await?; let now = Instant::now(); let _ = substream.next().await.ok_or(Error::SubstreamError( SubstreamError::ReadFailure(Some(substream_id)), diff --git a/src/transport/manager/mod.rs b/src/transport/manager/mod.rs index 2d2e2b1c..2a20a8fa 100644 --- a/src/transport/manager/mod.rs +++ b/src/transport/manager/mod.rs @@ -1174,8 +1174,7 @@ impl TransportManager { // cancel open attempts for other transports as connection already exists for transport in transports.iter() { - let _ = self - .transports + self.transports .get_mut(transport) .expect("transport to exist") .cancel(connection_id); diff --git a/src/transport/webrtc/substream.rs b/src/transport/webrtc/substream.rs index b027b8af..53cfc4c1 100644 --- a/src/transport/webrtc/substream.rs +++ b/src/transport/webrtc/substream.rs @@ -118,7 +118,7 @@ impl SubstreamHandle { pub async fn on_message(&self, message: WebRtcMessage) -> crate::Result<()> { if let Some(flags) = message.flags { if flags == Flag::Fin as i32 { - let _ = self.tx.send(Event::RecvClosed).await?; + self.tx.send(Event::RecvClosed).await?; } if flags & 1 == Flag::StopSending as i32 { From beb879c575dbb02ecf1f81d9e014833ba7733f00 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:19:52 +0300 Subject: [PATCH 13/35] fix: for_kv_map Signed-off-by: Alexandru Vasile --- src/transport/manager/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/transport/manager/mod.rs b/src/transport/manager/mod.rs index 2a20a8fa..0cec9a7d 100644 --- a/src/transport/manager/mod.rs +++ b/src/transport/manager/mod.rs @@ -460,7 +460,7 @@ impl TransportManager { return Err(Error::NoAddressAvailable(peer)); } - for (_, record) in &records { + for record in records.values() { if self.listen_addresses.read().contains(record.as_ref()) { tracing::warn!( target: LOG_TARGET, From c3218133e235330701ef946ae439d02e61865647 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:25:57 +0300 Subject: [PATCH 14/35] fix: map_flatten Signed-off-by: Alexandru Vasile --- src/protocol/libp2p/identify.rs | 2 +- src/protocol/libp2p/kademlia/message.rs | 11 +++-------- src/protocol/libp2p/kademlia/routing_table.rs | 3 +-- src/protocol/protocol_set.rs | 3 +-- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/protocol/libp2p/identify.rs b/src/protocol/libp2p/identify.rs index 8daadc2c..30117e87 100644 --- a/src/protocol/libp2p/identify.rs +++ b/src/protocol/libp2p/identify.rs @@ -351,7 +351,7 @@ impl Identify { .filter_map(|address| Multiaddr::try_from(address.clone()).ok()) .collect(); let observed_address = - info.observed_addr.map(|address| Multiaddr::try_from(address).ok()).flatten(); + info.observed_addr.and_then(|address| Multiaddr::try_from(address).ok()); let protocol_version = info.protocol_version; let user_agent = info.agent_version; diff --git a/src/protocol/libp2p/kademlia/message.rs b/src/protocol/libp2p/kademlia/message.rs index 776afb29..7ae25bf9 100644 --- a/src/protocol/libp2p/kademlia/message.rs +++ b/src/protocol/libp2p/kademlia/message.rs @@ -179,14 +179,9 @@ impl KademliaMessage { } 1 => { let key = match message.key.is_empty() { - true => message - .record - .as_ref() - .map(|record| { - (!record.key.is_empty()) - .then_some(RecordKey::from(record.key.clone())) - }) - .flatten(), + true => message.record.as_ref().and_then(|record| { + (!record.key.is_empty()).then_some(RecordKey::from(record.key.clone())) + }), false => Some(RecordKey::from(message.key.clone())), }; diff --git a/src/protocol/libp2p/kademlia/routing_table.rs b/src/protocol/libp2p/kademlia/routing_table.rs index 7ac9fe7b..b17c7226 100644 --- a/src/protocol/libp2p/kademlia/routing_table.rs +++ b/src/protocol/libp2p/kademlia/routing_table.rs @@ -179,8 +179,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)) - .map(|index| self.buckets[index.get()].closest_iter(&target)) - .flatten() + .flat_map(|index| self.buckets[index.get()].closest_iter(&target)) .take(limit) .collect() } diff --git a/src/protocol/protocol_set.rs b/src/protocol/protocol_set.rs index 80735ab7..f393d969 100644 --- a/src/protocol/protocol_set.rs +++ b/src/protocol/protocol_set.rs @@ -228,14 +228,13 @@ impl ProtocolSet { let fallback_names = protocols .iter() - .map(|(protocol, context)| { + .flat_map(|(protocol, context)| { context .fallback_names .iter() .map(|fallback| (fallback.clone(), protocol.clone())) .collect::>() }) - .flatten() .collect(); ProtocolSet { From 49695b736a6e7d603681d196b6a8527b497a2bc6 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:27:53 +0300 Subject: [PATCH 15/35] fix: blocks_in_conditions Signed-off-by: Alexandru Vasile --- src/transport/websocket/mod.rs | 48 +++++++++++++++++----------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/transport/websocket/mod.rs b/src/transport/websocket/mod.rs index 99f3ef3d..e1c34c36 100644 --- a/src/transport/websocket/mod.rs +++ b/src/transport/websocket/mod.rs @@ -348,32 +348,32 @@ impl Transport for WebSocketTransport { tracing::debug!(target: LOG_TARGET, ?connection_id, ?address, "open connection"); - self.pending_connections.push(Box::pin(async move { - match tokio::time::timeout(connection_open_timeout, async move { - let (_, stream) = WebSocketTransport::dial_peer( - address.clone(), - dial_addresses, - connection_open_timeout, - ) - .await - .map_err(|error| WebSocketError::new(error, Some(connection_id)))?; + let future = async move { + let (_, stream) = WebSocketTransport::dial_peer( + address.clone(), + dial_addresses, + connection_open_timeout, + ) + .await + .map_err(|error| WebSocketError::new(error, Some(connection_id)))?; - WebSocketConnection::open_connection( - connection_id, - keypair, - stream, - address, - peer, - ws_address, - yamux_config, - max_read_ahead_factor, - max_write_buffer_size, - ) - .await - .map_err(|error| WebSocketError::new(error, Some(connection_id))) - }) + WebSocketConnection::open_connection( + connection_id, + keypair, + stream, + address, + peer, + ws_address, + yamux_config, + max_read_ahead_factor, + max_write_buffer_size, + ) .await - { + .map_err(|error| WebSocketError::new(error, Some(connection_id))) + }; + + self.pending_connections.push(Box::pin(async move { + match tokio::time::timeout(connection_open_timeout, future).await { Err(_) => Err(WebSocketError::new(Error::Timeout, Some(connection_id))), Ok(Err(error)) => Err(error), Ok(Ok(result)) => Ok(result), From 14123fa2d0656a20ce3e73e3d02400ccccd01637 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:30:06 +0300 Subject: [PATCH 16/35] fix: derived_hash_with_manual_eq Signed-off-by: Alexandru Vasile --- src/transport/manager/address.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/transport/manager/address.rs b/src/transport/manager/address.rs index 6cf2cad1..e8634afa 100644 --- a/src/transport/manager/address.rs +++ b/src/transport/manager/address.rs @@ -25,6 +25,7 @@ use multihash::Multihash; use std::collections::{BinaryHeap, HashSet}; +#[allow(clippy::derived_hash_with_manual_eq)] #[derive(Debug, Clone, Hash)] pub struct AddressRecord { /// Address score. From 64fb8a4329018214c7ca498e10b489161c96ae23 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:32:53 +0300 Subject: [PATCH 17/35] allow: redundant_pattern_matching Signed-off-by: Alexandru Vasile --- src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib.rs b/src/lib.rs index 3d56ff8a..3da39feb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -20,6 +20,7 @@ #![allow(clippy::single_match)] #![allow(clippy::result_large_err)] +#![allow(clippy::redundant_pattern_matching)] use crate::{ config::Litep2pConfig, From bf403d5c06e71397f95d16f4f4bc801b943bfc29 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:36:14 +0300 Subject: [PATCH 18/35] fix: derivable_impls Signed-off-by: Alexandru Vasile --- src/transport/websocket/listener.rs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/transport/websocket/listener.rs b/src/transport/websocket/listener.rs index 0a9ea37b..082ae201 100644 --- a/src/transport/websocket/listener.rs +++ b/src/transport/websocket/listener.rs @@ -56,22 +56,17 @@ pub struct WebSocketListener { } /// Local addresses to use for outbound connections. -#[derive(Clone)] +#[derive(Clone, Default)] pub enum DialAddresses { /// Reuse port from listen addresses. Reuse { listen_addresses: Arc>, }, /// Do not reuse port. + #[default] NoReuse, } -impl Default for DialAddresses { - fn default() -> Self { - DialAddresses::NoReuse - } -} - impl DialAddresses { /// Get local dial address for an outbound connection. pub(super) fn local_dial_address( From 92f4e408c04a075378c272ddea41e1ca53614a86 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:36:39 +0300 Subject: [PATCH 19/35] fix: identity_op Signed-off-by: Alexandru Vasile --- src/crypto/noise/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crypto/noise/mod.rs b/src/crypto/noise/mod.rs index 1c04e1e8..73afdd9b 100644 --- a/src/crypto/noise/mod.rs +++ b/src/crypto/noise/mod.rs @@ -599,7 +599,7 @@ impl AsyncWrite for NoiseSocket { return Poll::Ready(Err(io::ErrorKind::InvalidData.into())); } Ok(nwritten) => { - this.encrypt_buffer[offset + 0] = (nwritten >> 8) as u8; + this.encrypt_buffer[offset] = (nwritten >> 8) as u8; this.encrypt_buffer[offset + 1] = (nwritten & 0xff) as u8; if let Some(next_chunk) = chunks.peek() { From 9c805df4d46dea25c8c2398767c975b7d67ad10c Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:40:34 +0300 Subject: [PATCH 20/35] fix: mem_replace_with_default Signed-off-by: Alexandru Vasile --- src/transport/quic/mod.rs | 2 +- src/transport/tcp/mod.rs | 2 +- src/transport/webrtc/connection.rs | 2 +- src/transport/websocket/mod.rs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/transport/quic/mod.rs b/src/transport/quic/mod.rs index 6c015bfc..735bb49d 100644 --- a/src/transport/quic/mod.rs +++ b/src/transport/quic/mod.rs @@ -181,7 +181,7 @@ impl TransportBuilder for QuicTransport { let (listener, listen_addresses) = QuicListener::new( &context.keypair, - std::mem::replace(&mut config.listen_addresses, Vec::new()), + std::mem::take(&mut config.listen_addresses), )?; Ok(( diff --git a/src/transport/tcp/mod.rs b/src/transport/tcp/mod.rs index 862d5b63..000f9e2f 100644 --- a/src/transport/tcp/mod.rs +++ b/src/transport/tcp/mod.rs @@ -259,7 +259,7 @@ impl TransportBuilder for TcpTransport { // start tcp listeners for all listen addresses let (listener, listen_addresses, dial_addresses) = TcpListener::new( - std::mem::replace(&mut config.listen_addresses, Vec::new()), + std::mem::take(&mut config.listen_addresses), config.reuse_port, ); diff --git a/src/transport/webrtc/connection.rs b/src/transport/webrtc/connection.rs index ae3453b3..d7abfb4a 100644 --- a/src/transport/webrtc/connection.rs +++ b/src/transport/webrtc/connection.rs @@ -258,7 +258,7 @@ impl WebRtcConnection { return Ok(()); }; - let fallback_names = std::mem::replace(&mut context.fallback_names, Vec::new()); + let fallback_names = std::mem::take(&mut context.fallback_names); let (dialer_state, message) = DialerState::propose(context.protocol.clone(), fallback_names)?; let message = WebRtcMessage::encode(message); diff --git a/src/transport/websocket/mod.rs b/src/transport/websocket/mod.rs index e1c34c36..b8b034da 100644 --- a/src/transport/websocket/mod.rs +++ b/src/transport/websocket/mod.rs @@ -313,7 +313,7 @@ impl TransportBuilder for WebSocketTransport { "start websocket transport", ); let (listener, listen_addresses, dial_addresses) = WebSocketListener::new( - std::mem::replace(&mut config.listen_addresses, Vec::new()), + std::mem::take(&mut config.listen_addresses), config.reuse_port, ); From fa43cdb5ba0035adb1142149ee8c451f2b7f1c58 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:41:01 +0300 Subject: [PATCH 21/35] allow: type_complexity Signed-off-by: Alexandru Vasile --- src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib.rs b/src/lib.rs index 3da39feb..913354d6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,6 +21,7 @@ #![allow(clippy::single_match)] #![allow(clippy::result_large_err)] #![allow(clippy::redundant_pattern_matching)] +#![allow(clippy::type_complexity)] use crate::{ config::Litep2pConfig, From 4e60e551456c92ccd718030c730cba8ff6ea3cd5 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:42:55 +0300 Subject: [PATCH 22/35] fix: get_first Signed-off-by: Alexandru Vasile --- src/transport/quic/mod.rs | 2 +- src/transport/tcp/listener.rs | 2 +- src/transport/websocket/listener.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/transport/quic/mod.rs b/src/transport/quic/mod.rs index 735bb49d..5972993f 100644 --- a/src/transport/quic/mod.rs +++ b/src/transport/quic/mod.rs @@ -104,7 +104,7 @@ impl QuicTransport { fn extract_peer_id(connection: &Connection) -> Option { let certificates: Box> = connection.peer_identity()?.downcast().ok()?; - let p2p_cert = crate::crypto::tls::certificate::parse(certificates.get(0)?) + let p2p_cert = crate::crypto::tls::certificate::parse(certificates.first()?) .expect("the certificate was validated during TLS handshake; qed"); Some(p2p_cert.peer_id()) diff --git a/src/transport/tcp/listener.rs b/src/transport/tcp/listener.rs index 2a1ddb72..95ff8ace 100644 --- a/src/transport/tcp/listener.rs +++ b/src/transport/tcp/listener.rs @@ -161,7 +161,7 @@ impl TcpListener { local_address.port(), )), (Addr::V6(inner), false) => - match inner.ip.segments().get(0) { + match inner.ip.segments().first() { Some(0xfe80) => None, _ => Some(SocketAddr::new( IpAddr::V6(inner.ip), diff --git a/src/transport/websocket/listener.rs b/src/transport/websocket/listener.rs index 082ae201..87dc057a 100644 --- a/src/transport/websocket/listener.rs +++ b/src/transport/websocket/listener.rs @@ -160,7 +160,7 @@ impl WebSocketListener { local_address.port(), )), (Addr::V6(inner), false) => - match inner.ip.segments().get(0) { + match inner.ip.segments().first() { Some(0xfe80) => None, _ => Some(SocketAddr::new( IpAddr::V6(inner.ip), From 0edeb56da334f2fe7921f14a3668c99766c8d31f Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:44:08 +0300 Subject: [PATCH 23/35] fix: to_string_in_format_args Signed-off-by: Alexandru Vasile --- src/transport/websocket/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/transport/websocket/mod.rs b/src/transport/websocket/mod.rs index b8b034da..3a8ab550 100644 --- a/src/transport/websocket/mod.rs +++ b/src/transport/websocket/mod.rs @@ -141,7 +141,7 @@ impl WebSocketTransport { .ok_or_else(|| Error::TransportNotSupported(address.clone()))? { Protocol::Ip4(address) => address.to_string(), - Protocol::Ip6(address) => format!("[{}]", address.to_string()), + Protocol::Ip6(address) => format!("[{address}]"), Protocol::Dns(address) | Protocol::Dns4(address) | Protocol::Dns6(address) => address.to_string(), From b117b165bdc2879c2e858b2a885f0b6e436bab7e Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:44:40 +0300 Subject: [PATCH 24/35] fix: op_ref Signed-off-by: Alexandru Vasile --- src/protocol/libp2p/kademlia/bucket.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/protocol/libp2p/kademlia/bucket.rs b/src/protocol/libp2p/kademlia/bucket.rs index 211db298..2b1ae87c 100644 --- a/src/protocol/libp2p/kademlia/bucket.rs +++ b/src/protocol/libp2p/kademlia/bucket.rs @@ -72,7 +72,7 @@ impl KBucket { // TODO: this is horrible code pub fn entry(&mut self, key: Key) -> KBucketEntry<'_> { for i in 0..self.nodes.len() { - if &self.nodes[i].key == &key { + if self.nodes[i].key == key { return KBucketEntry::Occupied(&mut self.nodes[i]); } } From 0d865889bcc303f515891baf1a9531c42a2c3de3 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:45:39 +0300 Subject: [PATCH 25/35] fix: derive imp again Signed-off-by: Alexandru Vasile --- src/transport/tcp/listener.rs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/transport/tcp/listener.rs b/src/transport/tcp/listener.rs index 95ff8ace..40e1043e 100644 --- a/src/transport/tcp/listener.rs +++ b/src/transport/tcp/listener.rs @@ -57,22 +57,17 @@ pub struct TcpListener { } /// Local addresses to use for outbound connections. -#[derive(Clone)] +#[derive(Clone, Default)] pub enum DialAddresses { /// Reuse port from listen addresses. Reuse { listen_addresses: Arc>, }, /// Do not reuse port. + #[default] NoReuse, } -impl Default for DialAddresses { - fn default() -> Self { - DialAddresses::NoReuse - } -} - impl DialAddresses { /// Get local dial address for an outbound connection. pub(super) fn local_dial_address( From 6a02c996c6766641fab7f1503e9a58d920c4c0b9 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:47:17 +0300 Subject: [PATCH 26/35] fix: while_let_on_iterator Signed-off-by: Alexandru Vasile --- src/transport/tcp/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/transport/tcp/mod.rs b/src/transport/tcp/mod.rs index 000f9e2f..e9dee257 100644 --- a/src/transport/tcp/mod.rs +++ b/src/transport/tcp/mod.rs @@ -153,8 +153,8 @@ impl TcpTransport { { // TODO: ugly Ok(lookup) => { - let mut iter = lookup.iter(); - while let Some(ip) = iter.next() { + let iter = lookup.iter(); + for ip in iter { match ( address.iter().next().expect("protocol to exist"), ip.is_ipv4(), From fb46a29eec063f5c85f4f727fc43296c55f9e88d Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:50:30 +0300 Subject: [PATCH 27/35] fix: iter_kv_map Signed-off-by: Alexandru Vasile --- src/protocol/libp2p/kademlia/query/mod.rs | 4 ++-- src/protocol/protocol_set.rs | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/protocol/libp2p/kademlia/query/mod.rs b/src/protocol/libp2p/kademlia/query/mod.rs index 43dc2409..89fa4fab 100644 --- a/src/protocol/libp2p/kademlia/query/mod.rs +++ b/src/protocol/libp2p/kademlia/query/mod.rs @@ -384,11 +384,11 @@ impl QueryEngine { QueryType::FindNode { context } => QueryAction::FindNodeQuerySucceeded { query, target: context.target.into_preimage(), - peers: context.responses.into_iter().map(|(_, peer)| peer).collect::>(), + peers: context.responses.into_values().collect::>(), }, QueryType::PutRecord { record, context } => QueryAction::PutRecordToFoundNodes { record, - peers: context.responses.into_iter().map(|(_, peer)| peer).collect::>(), + peers: context.responses.into_values().collect::>(), }, QueryType::PutRecordToPeers { record, context } => QueryAction::PutRecordToFoundNodes { record, diff --git a/src/protocol/protocol_set.rs b/src/protocol/protocol_set.rs index f393d969..f2328ebe 100644 --- a/src/protocol/protocol_set.rs +++ b/src/protocol/protocol_set.rs @@ -339,8 +339,8 @@ impl ProtocolSet { let connection_handle = self.connection.downgrade(); let mut futures = self .protocols - .iter() - .map(|(_, sender)| { + .values() + .map(|sender| { let endpoint = endpoint.clone(); let connection_handle = connection_handle.clone(); @@ -375,8 +375,8 @@ impl ProtocolSet { ) -> crate::Result<()> { let mut futures = self .protocols - .iter() - .map(|(_, sender)| async move { + .values() + .map(|sender| async move { sender .tx .send(InnerTransportEvent::ConnectionClosed { From 69e0c441b89b89496176df61b2a66b7ab034754e Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 17:51:36 +0300 Subject: [PATCH 28/35] allow: result_unit_err Signed-off-by: Alexandru Vasile --- src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib.rs b/src/lib.rs index 913354d6..d69e7667 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,6 +22,7 @@ #![allow(clippy::result_large_err)] #![allow(clippy::redundant_pattern_matching)] #![allow(clippy::type_complexity)] +#![allow(clippy::result_unit_err)] use crate::{ config::Litep2pConfig, From 739ef2381efa76f0ad45184a3cc88d6eda0fe149 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 18:02:32 +0300 Subject: [PATCH 29/35] fix: don't bind tokio::spawn Signed-off-by: Alexandru Vasile --- src/executor.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/executor.rs b/src/executor.rs index d5d7bdd8..fe8d06ea 100644 --- a/src/executor.rs +++ b/src/executor.rs @@ -36,11 +36,11 @@ pub(crate) struct DefaultExecutor; impl Executor for DefaultExecutor { fn run(&self, future: Pin + Send>>) { - let _ = tokio::spawn(future); + tokio::spawn(future); } fn run_with_name(&self, _: &'static str, future: Pin + Send>>) { - let _ = tokio::spawn(future); + tokio::spawn(future); } } From d5badf99117432c3996c5043c10029f6b703cbe5 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 18:05:04 +0300 Subject: [PATCH 30/35] allow: should_implement_trait Signed-off-by: Alexandru Vasile --- src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib.rs b/src/lib.rs index d69e7667..0fdde2de 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -23,6 +23,7 @@ #![allow(clippy::redundant_pattern_matching)] #![allow(clippy::type_complexity)] #![allow(clippy::result_unit_err)] +#![allow(clippy::should_implement_trait)] use crate::{ config::Litep2pConfig, From 0d18112f6757d30b04afe70f5de01b067adf4475 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 18:05:49 +0300 Subject: [PATCH 31/35] fix: clone_on_copy Signed-off-by: Alexandru Vasile --- src/protocol/libp2p/kademlia/query/find_node.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/protocol/libp2p/kademlia/query/find_node.rs b/src/protocol/libp2p/kademlia/query/find_node.rs index 7d0bdb12..04a058a3 100644 --- a/src/protocol/libp2p/kademlia/query/find_node.rs +++ b/src/protocol/libp2p/kademlia/query/find_node.rs @@ -206,7 +206,7 @@ impl>> FindNodeContext { .target .distance(&self.candidates.first_key_value().expect("candidate to exist").1.key); let worst_response_candidate = - self.responses.last_entry().expect("response to exist").key().clone(); + *self.responses.last_entry().expect("response to exist").key(); if first_candidate_distance < worst_response_candidate && self.pending.len() < self.parallelism_factor From 6423ed207865d060615cee11e4ed90491357f8d7 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 18:10:53 +0300 Subject: [PATCH 32/35] fix: impl from over into Signed-off-by: Alexandru Vasile --- src/protocol/libp2p/kademlia/record.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/protocol/libp2p/kademlia/record.rs b/src/protocol/libp2p/kademlia/record.rs index bc7dcc10..1f58fb16 100644 --- a/src/protocol/libp2p/kademlia/record.rs +++ b/src/protocol/libp2p/kademlia/record.rs @@ -43,9 +43,9 @@ impl Key { } } -impl Into> for Key { - fn into(self) -> Vec { - Vec::from(&self.0[..]) +impl From for Vec { + fn from(k: Key) -> Vec { + Vec::from(&k.0[..]) } } From af99ff94a5ac619c132b86a5928c012863108d2d Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 18:42:07 +0300 Subject: [PATCH 33/35] fix: remaining clippy Signed-off-by: Alexandru Vasile --- src/lib.rs | 3 +++ src/protocol/connection.rs | 6 ++---- src/protocol/libp2p/kademlia/mod.rs | 12 +++++------ src/protocol/mdns.rs | 2 +- src/protocol/notification/handle.rs | 10 +++------- src/substream/mod.rs | 5 +++++ src/transport/manager/address.rs | 2 +- src/transport/webrtc/mod.rs | 2 +- src/transport/webrtc/substream.rs | 31 +++++++++++++---------------- src/transport/websocket/mod.rs | 4 ++-- 10 files changed, 37 insertions(+), 40 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 0fdde2de..dfa67b97 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -24,6 +24,9 @@ #![allow(clippy::type_complexity)] #![allow(clippy::result_unit_err)] #![allow(clippy::should_implement_trait)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::assign_op_pattern)] +#![allow(clippy::match_like_matches_macro)] use crate::{ config::Litep2pConfig, diff --git a/src/protocol/connection.rs b/src/protocol/connection.rs index 6d2bdcdf..107e2df2 100644 --- a/src/protocol/connection.rs +++ b/src/protocol/connection.rs @@ -69,7 +69,7 @@ impl ConnectionHandle { /// This function is only called once when the connection is established to remote peer and that /// one time the connection type must be `Active`, unless there is a logic bug in `litep2p`. pub fn downgrade(&mut self) -> Self { - let connection = match &self.connection { + match &self.connection { ConnectionType::Active(connection) => { let handle = Self::new(self.connection_id, connection.clone()); self.connection = ConnectionType::Inactive(connection.downgrade()); @@ -79,9 +79,7 @@ impl ConnectionHandle { ConnectionType::Inactive(_) => { panic!("state mismatch: tried to downgrade an inactive connection") } - }; - - connection + } } /// Get reference to connection ID. diff --git a/src/protocol/libp2p/kademlia/mod.rs b/src/protocol/libp2p/kademlia/mod.rs index d26eff05..a1c646f0 100644 --- a/src/protocol/libp2p/kademlia/mod.rs +++ b/src/protocol/libp2p/kademlia/mod.rs @@ -276,7 +276,7 @@ impl Kademlia { .pending_actions .remove(&substream_id); - match std::mem::replace(pending_action, None) { + match pending_action.take() { None => { tracing::trace!( target: LOG_TARGET, @@ -336,11 +336,9 @@ impl Kademlia { /// /// Inform user about the potential routing table, allowing them to update it manually if /// the mode was set to manual. - async fn update_routing_table(&mut self, peers: &Vec) { - let peers: Vec<_> = peers - .iter() - .filter_map(|peer| (peer.peer != self.service.local_peer_id).then_some(peer)) - .collect(); + async fn update_routing_table(&mut self, peers: &[KademliaPeer]) { + let peers: Vec<_> = + peers.iter().filter(|peer| peer.peer != self.service.local_peer_id).collect(); // inform user about the routing table update, regardless of what the routing table update // mode is @@ -449,7 +447,7 @@ impl Kademlia { "handle `GET_VALUE` request", ); - let value = self.store.get(key).map(|value| value.clone()); + let value = self.store.get(key).cloned(); let closest_peers = self .routing_table .closest(Key::from(key.to_vec()), self.replication_factor); diff --git a/src/protocol/mdns.rs b/src/protocol/mdns.rs index 5e7270ec..685c34f7 100644 --- a/src/protocol/mdns.rs +++ b/src/protocol/mdns.rs @@ -266,7 +266,7 @@ impl Mdns { .attributes() .iter() .filter_map(|(_, address)| { - address.as_ref().map_or(None, |inner| inner.parse().ok()) + address.as_ref().and_then(|inner| inner.parse().ok()) }) .collect(), _ => vec![], diff --git a/src/protocol/notification/handle.rs b/src/protocol/notification/handle.rs index abdb5e40..278fb7b4 100644 --- a/src/protocol/notification/handle.rs +++ b/src/protocol/notification/handle.rs @@ -325,9 +325,7 @@ impl NotificationHandle { /// Similar to [`NotificationHandle::close_substream()`] but multiple substreams are closed /// using a single call to `NotificationProtocol`. pub async fn close_substream_batch(&self, peers: impl Iterator) { - let peers = peers - .filter_map(|peer| self.peers.contains_key(&peer).then_some(peer)) - .collect::>(); + let peers = peers.filter(|peer| self.peers.contains_key(peer)).collect::>(); if peers.is_empty() { return; @@ -355,9 +353,7 @@ impl NotificationHandle { &self, peers: impl Iterator, ) -> Result<(), HashSet> { - let peers = peers - .filter_map(|peer| self.peers.contains_key(&peer).then_some(peer)) - .collect::>(); + let peers = peers.filter(|peer| self.peers.contains_key(peer)).collect::>(); if peers.is_empty() { return Err(HashSet::new()); @@ -439,7 +435,7 @@ impl NotificationHandle { /// /// `None` is returned if `peer` doesn't exist. pub fn notification_sink(&self, peer: PeerId) -> Option { - self.peers.get(&peer).and_then(|sink| Some(sink.clone())) + self.peers.get(&peer).cloned() } } diff --git a/src/substream/mod.rs b/src/substream/mod.rs index 7bb2ad1e..7cc41fa3 100644 --- a/src/substream/mod.rs +++ b/src/substream/mod.rs @@ -795,6 +795,11 @@ where pub fn len(&self) -> usize { self.substreams.len() } + + /// Check if [`SubstreamSet`] is empty. + pub fn is_empty(&self) -> bool { + self.substreams.is_empty() + } } impl Stream for SubstreamSet diff --git a/src/transport/manager/address.rs b/src/transport/manager/address.rs index e8634afa..9a4627d2 100644 --- a/src/transport/manager/address.rs +++ b/src/transport/manager/address.rs @@ -55,7 +55,7 @@ impl AddressRecord { ) -> Self { let address = if !std::matches!(address.iter().last(), Some(Protocol::P2p(_))) { address.with(Protocol::P2p( - Multihash::from_bytes(&peer.to_bytes()).ok().expect("valid peer id"), + Multihash::from_bytes(&peer.to_bytes()).expect("valid peer id"), )) } else { address diff --git a/src/transport/webrtc/mod.rs b/src/transport/webrtc/mod.rs index 834659f9..6a1e280c 100644 --- a/src/transport/webrtc/mod.rs +++ b/src/transport/webrtc/mod.rs @@ -480,7 +480,7 @@ impl Transport for WebRtcTransport { "webrtc cannot dial", ); - Err(Error::NotSupported(format!("webrtc cannot dial peers"))) + Err(Error::NotSupported("webrtc cannot dial peers".to_string())) } fn accept(&mut self, connection_id: ConnectionId) -> crate::Result<()> { diff --git a/src/transport/webrtc/substream.rs b/src/transport/webrtc/substream.rs index 53cfc4c1..7da6afae 100644 --- a/src/transport/webrtc/substream.rs +++ b/src/transport/webrtc/substream.rs @@ -165,27 +165,24 @@ impl tokio::io::AsyncRead for Substream { return Poll::Ready(Ok(())); } - loop { - match futures::ready!(self.rx.poll_recv(cx)) { - None | Some(Event::Close) | Some(Event::RecvClosed) => { - return Poll::Ready(Err(std::io::ErrorKind::BrokenPipe.into())); + match futures::ready!(self.rx.poll_recv(cx)) { + None | Some(Event::Close) | Some(Event::RecvClosed) => + Poll::Ready(Err(std::io::ErrorKind::BrokenPipe.into())), + Some(Event::Message(message)) => { + if message.len() > MAX_FRAME_SIZE { + return Poll::Ready(Err(std::io::ErrorKind::PermissionDenied.into())); } - Some(Event::Message(message)) => { - if message.len() > MAX_FRAME_SIZE { - return Poll::Ready(Err(std::io::ErrorKind::PermissionDenied.into())); - } - match buf.remaining() >= message.len() { - true => buf.put_slice(&message), - false => { - let remaining = buf.remaining(); - buf.put_slice(&message[..remaining]); - self.read_buffer.put_slice(&message[remaining..]); - } + match buf.remaining() >= message.len() { + true => buf.put_slice(&message), + false => { + let remaining = buf.remaining(); + buf.put_slice(&message[..remaining]); + self.read_buffer.put_slice(&message[remaining..]); } - - return Poll::Ready(Ok(())); } + + Poll::Ready(Ok(())) } } } diff --git a/src/transport/websocket/mod.rs b/src/transport/websocket/mod.rs index 3a8ab550..a90db4ed 100644 --- a/src/transport/websocket/mod.rs +++ b/src/transport/websocket/mod.rs @@ -200,8 +200,8 @@ impl WebSocketTransport { { // TODO: ugly Ok(lookup) => { - let mut iter = lookup.iter(); - while let Some(ip) = iter.next() { + let iter = lookup.iter(); + for ip in iter { match ( address.iter().next().expect("protocol to exist"), ip.is_ipv4(), From f1e2b132e93fc6b1fe1ffb3d2f0133831cf76436 Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 18:42:47 +0300 Subject: [PATCH 34/35] ci: Fail on clippy error Signed-off-by: Alexandru Vasile --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d9230fbe..132f1741 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -117,10 +117,7 @@ jobs: cache-on-failure: true cache-all-crates: true - # TODO: Allow clippy to fail and do not cancel other tasks. - # Clippy is fixed by: https://github.com/paritytech/litep2p/pull/57. - name: Run clippy - continue-on-error: true run: cargo clippy test: From 5c37774d0b377430bad408a6f7ed5e9f1ff53c7f Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 22 Apr 2024 18:58:35 +0300 Subject: [PATCH 35/35] Apply rustfmt Signed-off-by: Alexandru Vasile --- examples/custom_protocol.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/custom_protocol.rs b/examples/custom_protocol.rs index d97d889a..b69ede2d 100644 --- a/examples/custom_protocol.rs +++ b/examples/custom_protocol.rs @@ -289,9 +289,11 @@ async fn main() { } }); - for message in [b"hello, world".to_vec(), + for message in [ + b"hello, world".to_vec(), b"testing 123".to_vec(), - b"goodbye, world".to_vec()] { + b"goodbye, world".to_vec(), + ] { handle1 .cmd_tx .send(CustomProtocolCommand::SendMessage {