diff --git a/crates/buffers/src/lib.rs b/crates/buffers/src/lib.rs index 2561678..e62510c 100644 --- a/crates/buffers/src/lib.rs +++ b/crates/buffers/src/lib.rs @@ -131,6 +131,18 @@ impl std::convert::AsRef<[u8]> for ByteBufOwned { } } +impl std::borrow::Borrow<[u8]> for ByteBufOwned { + fn borrow(&self) -> &[u8] { + &self.0 + } +} + +impl<'a> std::borrow::Borrow<[u8]> for ByteBuf<'a> { + fn borrow(&self) -> &[u8] { + self.0 + } +} + impl<'a> std::ops::Deref for ByteBuf<'a> { type Target = [u8]; diff --git a/crates/librqbit/src/peer_info_reader/mod.rs b/crates/librqbit/src/peer_info_reader/mod.rs index 9815f5e..6485cd0 100644 --- a/crates/librqbit/src/peer_info_reader/mod.rs +++ b/crates/librqbit/src/peer_info_reader/mod.rs @@ -215,7 +215,7 @@ impl PeerConnectionHandler for Handler { None => anyhow::bail!("peer does not have metadata_size"), }; - if extended_handshake.get_msgid(b"ut_metadata").is_none() { + if extended_handshake.ut_metadata().is_none() { anyhow::bail!("peer does not support ut_metadata"); } diff --git a/crates/peer_binary_protocol/src/extended/handshake.rs b/crates/peer_binary_protocol/src/extended/handshake.rs index e9a686f..e6d4d8a 100644 --- a/crates/peer_binary_protocol/src/extended/handshake.rs +++ b/crates/peer_binary_protocol/src/extended/handshake.rs @@ -47,24 +47,15 @@ impl ExtendedHandshake> { } } -impl ExtendedHandshake { - pub fn get_msgid(&self, msg_type: &[u8]) -> Option - where - ByteBuf: AsRef<[u8]>, - { - self.m.iter().find_map(|(k, v)| { - if k.as_ref() == msg_type { - Some(*v) - } else { - None - } - }) +impl<'a, ByteBuf> ExtendedHandshake +where + ByteBuf: Eq + std::hash::Hash + std::borrow::Borrow<[u8]>, +{ + fn get_msgid(&self, msg_type: &'a [u8]) -> Option { + self.m.get(msg_type).map(|v| *v) } - pub fn ut_metadata(&self) -> Option - where - ByteBuf: AsRef<[u8]>, - { + pub fn ut_metadata(&self) -> Option { self.get_msgid(b"ut_metadata") } }