Skip to content

Commit 89fc4fc

Browse files
committed
Update bt_bencode 0.8; use &[u8] instead of Bytes
1 parent c0c7c2a commit 89fc4fc

File tree

5 files changed

+73
-94
lines changed

5 files changed

+73
-94
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ alloc = ["bt_bencode/alloc", "gen_value/alloc", "serde/alloc", "serde_bytes/allo
2929

3030
[dependencies]
3131
bitvec = { version = "1.0", default-features = false }
32-
bt_bencode = { version = "0.7", default-features = false }
32+
bt_bencode = { version = "0.8", default-features = false }
3333
bytes = { version = "1.1", default-features = false }
3434
crc32c = "0.6"
3535
gen_value = { version = "0.7", default-features = false }

src/dht/krpc.rs

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ use serde::{
1313
de::{self, Visitor},
1414
Deserialize, Serialize,
1515
};
16-
use serde_bytes::{ByteBuf, Bytes};
1716

1817
#[cfg(feature = "std")]
1918
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
@@ -99,28 +98,6 @@ impl<'a> From<&'a [u8]> for Ty {
9998
}
10099
}
101100

102-
impl<'a> From<&'a Bytes> for Ty {
103-
fn from(y: &'a Bytes) -> Self {
104-
match y.as_ref() {
105-
b"q" => Ty::Query,
106-
b"r" => Ty::Response,
107-
b"e" => Ty::Error,
108-
_ => Ty::Unknown,
109-
}
110-
}
111-
}
112-
113-
impl<'a> From<&'a ByteBuf> for Ty {
114-
fn from(y: &'a ByteBuf) -> Self {
115-
match y.as_slice() {
116-
b"q" => Ty::Query,
117-
b"r" => Ty::Response,
118-
b"e" => Ty::Error,
119-
_ => Ty::Unknown,
120-
}
121-
}
122-
}
123-
124101
/// A KRPC message.
125102
#[derive(Debug, serde_derive::Deserialize)]
126103
pub struct Msg<'a> {
@@ -256,33 +233,33 @@ impl<'a> Msg<'a> {
256233
#[derive(Debug, serde_derive::Deserialize)]
257234
pub struct QueryArgs<'a> {
258235
/// The querying node's ID
259-
#[serde(borrow)]
260-
pub id: &'a Bytes,
236+
#[serde(with = "serde_bytes")]
237+
pub id: &'a [u8],
261238
}
262239

263240
impl<'a> QueryArgs<'a> {
264241
/// Returns the querying node's ID.
265242
#[must_use]
266243
#[inline]
267244
pub fn id(&self) -> Option<Id> {
268-
Id::try_from(self.id.as_ref()).ok()
245+
Id::try_from(self.id).ok()
269246
}
270247
}
271248

272249
/// Generic response value.
273250
#[derive(Debug, serde_derive::Deserialize)]
274251
pub struct RespValues<'a> {
275252
/// The queried node's ID
276-
#[serde(borrow)]
277-
pub id: &'a Bytes,
253+
#[serde(with = "serde_bytes")]
254+
pub id: &'a [u8],
278255
}
279256

280257
impl<'a> RespValues<'a> {
281258
/// Returns the querying node's ID.
282259
#[must_use]
283260
#[inline]
284261
pub fn id(&self) -> Option<Id> {
285-
Id::try_from(self.id.as_ref()).ok()
262+
Id::try_from(self.id).ok()
286263
}
287264
}
288265

src/dht/krpc/get_peers.rs

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ pub const METHOD_GET_PEERS: &[u8] = b"get_peers";
3939
#[derive(Debug, Deserialize, Serialize)]
4040
pub struct QueryArgs<'a> {
4141
/// The querying node's ID
42-
#[serde(borrow)]
43-
pub id: &'a Bytes,
42+
#[serde(with = "serde_bytes")]
43+
pub id: &'a [u8],
4444
/// The `InfoHash` associated with the torrent
45-
#[serde(borrow)]
46-
pub info_hash: &'a Bytes,
45+
#[serde(with = "serde_bytes")]
46+
pub info_hash: &'a [u8],
4747
}
4848

4949
impl<'a> QueryArgs<'a> {
@@ -52,41 +52,41 @@ impl<'a> QueryArgs<'a> {
5252
#[inline]
5353
pub fn new(id: &'a LocalId, info_hash: &'a InfoHash) -> Self {
5454
Self {
55-
id: Bytes::new(&(id.0).0),
56-
info_hash: Bytes::new(&info_hash.0),
55+
id: &(id.0).0,
56+
info_hash: &info_hash.0,
5757
}
5858
}
5959

6060
/// Returns the querying node's ID.
6161
#[must_use]
6262
#[inline]
6363
pub fn id(&self) -> Option<Id> {
64-
Id::try_from(self.id.as_ref()).ok()
64+
Id::try_from(self.id).ok()
6565
}
6666

6767
/// Returns the `InfoHash` for the relevant torrent.
6868
#[must_use]
6969
#[inline]
7070
pub fn info_hash(&self) -> Option<InfoHash> {
71-
InfoHash::try_from(self.info_hash.as_ref()).ok()
71+
InfoHash::try_from(self.info_hash).ok()
7272
}
7373
}
7474

7575
/// The value for the get peers response.
7676
#[derive(Debug, Serialize, Deserialize)]
7777
pub struct RespValues<'a, V> {
7878
/// The queried node's ID
79-
#[serde(borrow)]
80-
pub id: &'a Bytes,
79+
#[serde(with = "serde_bytes")]
80+
pub id: &'a [u8],
8181
/// IPv4 nodes which may have relevant information
8282
#[serde(skip_serializing_if = "Option::is_none", borrow)]
8383
pub nodes: Option<&'a Bytes>,
8484
/// IPv6 nodes which may have relevant information
8585
#[serde(skip_serializing_if = "Option::is_none", borrow)]
8686
pub nodes6: Option<&'a Bytes>,
8787
/// An opaque token which can be used in an announce peer message.
88-
#[serde(borrow)]
89-
pub token: &'a Bytes,
88+
#[serde(with = "serde_bytes")]
89+
pub token: &'a [u8],
9090
/// Peer compact addresses
9191
#[serde(skip_serializing_if = "Option::is_none")]
9292
pub values: Option<V>,
@@ -98,13 +98,13 @@ impl<'a, V> RespValues<'a, V> {
9898
#[inline]
9999
pub fn new(
100100
id: &'a LocalId,
101-
token: &'a Bytes,
101+
token: &'a [u8],
102102
values: Option<V>,
103103
nodes: Option<&'a Bytes>,
104104
nodes6: Option<&'a Bytes>,
105105
) -> Self {
106106
Self {
107-
id: Bytes::new(&(id.0).0),
107+
id: &(id.0).0,
108108
token,
109109
values,
110110
nodes,
@@ -116,7 +116,7 @@ impl<'a, V> RespValues<'a, V> {
116116
#[must_use]
117117
#[inline]
118118
pub fn id(&self) -> Option<Id> {
119-
Id::try_from(self.id.as_ref()).ok()
119+
Id::try_from(self.id).ok()
120120
}
121121

122122
/// Returns the token which is used by the queried node for verification.
@@ -169,18 +169,18 @@ impl<'a, V> RespValues<'a, V> {
169169
}
170170
}
171171

172-
impl<'a> RespValues<'a, Vec<&'a Bytes>> {
172+
impl<'a> RespValues<'a, Vec<&'a [u8]>> {
173173
/// Returns peers' socket addresses for the torrent.
174174
#[must_use]
175175
#[inline]
176176
pub fn values(&'a self) -> Option<impl Iterator<Item = CompactAddr> + 'a> {
177177
self.values.as_ref().map(|values| {
178178
values.iter().filter_map(|&v| match v.len() {
179-
6 => <[u8; 6]>::try_from(v.as_ref())
179+
6 => <[u8; 6]>::try_from(v)
180180
.ok()
181181
.map(CompactAddrV4::from)
182182
.map(CompactAddr::from),
183-
18 => <[u8; 18]>::try_from(v.as_ref())
183+
18 => <[u8; 18]>::try_from(v)
184184
.ok()
185185
.map(CompactAddrV6::from)
186186
.map(CompactAddr::from),
@@ -193,7 +193,6 @@ impl<'a> RespValues<'a, Vec<&'a Bytes>> {
193193
#[cfg(test)]
194194
mod tests {
195195
use bt_bencode::Error;
196-
use serde_bytes::Bytes;
197196

198197
use super::*;
199198

@@ -221,9 +220,9 @@ mod tests {
221220
);
222221

223222
let ser_query_msg = ser::QueryMsg {
224-
t: Bytes::new(b"aa"),
223+
t: b"aa",
225224
v: None,
226-
q: Bytes::new(METHOD_GET_PEERS),
225+
q: METHOD_GET_PEERS,
227226
a: query_args,
228227
};
229228
let ser_msg = bt_bencode::to_vec(&ser_query_msg)?;
@@ -252,7 +251,7 @@ mod tests {
252251
assert_eq!(msg.ty(), Ty::Response);
253252
assert_eq!(msg.client_version(), None);
254253

255-
let resp_values: RespValues<'_, Vec<&'_ Bytes>> = msg.values().unwrap()?;
254+
let resp_values: RespValues<'_, Vec<&'_ [u8]>> = msg.values().unwrap()?;
256255
assert_eq!(resp_values.id(), Some(Id::from(*b"0123456789abcdefghij")));
257256
assert!(resp_values.values().is_none());
258257
assert_eq!(
@@ -262,7 +261,7 @@ mod tests {
262261
assert!(resp_values.nodes6().is_none());
263262

264263
let ser_resp_msg = ser::RespMsg {
265-
t: Bytes::new(b"aa"),
264+
t: b"aa",
266265
v: None,
267266
r: &resp_values,
268267
};
@@ -289,15 +288,15 @@ mod tests {
289288
let values: Vec<CompactAddr> = vec![compact_addr_v4.into(), compact_addr_v6.into()];
290289

291290
let resp_values: RespValues<'_, Vec<CompactAddr>> = RespValues {
292-
id: Bytes::new(b"0123456789abcdefghij"),
291+
id: b"0123456789abcdefghij",
293292
nodes: None,
294293
nodes6: None,
295-
token: Bytes::new(b"abcd1234"),
294+
token: b"abcd1234",
296295
values: Some(values),
297296
};
298297

299298
let ser_resp_msg = ser::RespMsg {
300-
t: Bytes::new(b"aa"),
299+
t: b"aa",
301300
v: None,
302301
r: &resp_values,
303302
};
@@ -308,7 +307,7 @@ mod tests {
308307
assert_eq!(msg.ty(), Ty::Response);
309308
assert_eq!(msg.client_version(), None);
310309

311-
let resp_values: RespValues<'_, Vec<&'_ Bytes>> = msg.values().unwrap().unwrap();
310+
let resp_values: RespValues<'_, Vec<&'_ [u8]>> = msg.values().unwrap().unwrap();
312311
assert_eq!(resp_values.id(), Some(Id::from(*b"0123456789abcdefghij")));
313312
assert_eq!(
314313
resp_values.values().unwrap().collect::<Vec<_>>(),

src/dht/krpc/ping.rs

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
//! [bep_0005]: http://bittorrent.org/beps/bep_0005.html
1414
1515
use core::convert::TryFrom;
16-
use serde_bytes::Bytes;
1716
use serde_derive::{Deserialize, Serialize};
1817

1918
use crate::dht::node::{Id, LocalId};
@@ -25,51 +24,47 @@ pub const METHOD_PING: &[u8] = b"ping";
2524
#[derive(Debug, Deserialize, Serialize)]
2625
pub struct QueryArgs<'a> {
2726
/// The querying node's ID
28-
#[serde(borrow)]
29-
pub id: &'a Bytes,
27+
#[serde(with = "serde_bytes")]
28+
pub id: &'a [u8],
3029
}
3130

3231
impl<'a> QueryArgs<'a> {
3332
/// Constructs a new `QueryArgs` based on the local node ID.
3433
#[must_use]
3534
#[inline]
3635
pub fn new(id: &'a LocalId) -> Self {
37-
Self {
38-
id: Bytes::new(&(id.0).0),
39-
}
36+
Self { id: &(id.0).0 }
4037
}
4138

4239
/// Returns the querying node's ID.
4340
#[must_use]
4441
#[inline]
4542
pub fn id(&self) -> Option<Id> {
46-
Id::try_from(self.id.as_ref()).ok()
43+
Id::try_from(self.id).ok()
4744
}
4845
}
4946

5047
/// The arguments for the ping query message.
5148
#[derive(Debug, Deserialize, Serialize)]
5249
pub struct RespValues<'a> {
5350
/// The queried node's ID
54-
#[serde(borrow)]
55-
pub id: &'a Bytes,
51+
#[serde(with = "serde_bytes")]
52+
pub id: &'a [u8],
5653
}
5754

5855
impl<'a> RespValues<'a> {
5956
/// Constructs a new `RespValue` based on the local node ID.
6057
#[must_use]
6158
#[inline]
6259
pub fn new(id: &'a LocalId) -> Self {
63-
Self {
64-
id: Bytes::new(&(id.0).0),
65-
}
60+
Self { id: &(id.0).0 }
6661
}
6762

6863
/// Returns the queried node's ID.
6964
#[must_use]
7065
#[inline]
7166
pub fn id(&self) -> Option<Id> {
72-
Id::try_from(self.id.as_ref()).ok()
67+
Id::try_from(self.id).ok()
7368
}
7469
}
7570

@@ -97,9 +92,9 @@ mod tests {
9792
assert_eq!(query_args.id(), Some(Id::from(*b"abcdefghij0123456789")));
9893

9994
let ser_query_msg = ser::QueryMsg {
100-
t: Bytes::new(b"aa"),
95+
t: b"aa".as_slice(),
10196
v: None,
102-
q: Bytes::new(METHOD_PING),
97+
q: METHOD_PING,
10398
a: query_args,
10499
};
105100
let ser_msg = bt_bencode::to_vec(&ser_query_msg)?;
@@ -121,7 +116,7 @@ mod tests {
121116
assert_eq!(resp_values.id(), Some(Id::from(*b"mnopqrstuvwxyz123456")));
122117

123118
let ser_resp_msg = ser::RespMsg {
124-
t: Bytes::new(b"aa"),
119+
t: b"aa".as_slice(),
125120
v: None,
126121
r: &resp_values,
127122
};

0 commit comments

Comments
 (0)