Skip to content

Commit d7a849a

Browse files
authored
Merge pull request rust-bitcoin#124 from nyonson/infallible-serde
Make serialize function infallible and remove error variant.
2 parents 7a0c2d0 + eb1b6b2 commit d7a849a

3 files changed

Lines changed: 10 additions & 10 deletions

File tree

protocol/src/serde.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,13 @@ pub use bitcoin::p2p::message::{CommandString, NetworkMessage};
1717

1818
#[derive(Debug)]
1919
pub enum Error {
20-
Serialize(bitcoin::io::Error),
2120
Deserialize(bitcoin::consensus::encode::Error),
2221
UnknownShortID(u8),
2322
}
2423

2524
impl fmt::Display for Error {
2625
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2726
match self {
28-
Error::Serialize(e) => write!(f, "Unable to serialize {e}"),
2927
Error::Deserialize(e) => write!(f, "Unable to deserialize {e}"),
3028
Error::UnknownShortID(b) => write!(f, "Unrecognized short ID when deserializing {b}"),
3129
}
@@ -35,15 +33,17 @@ impl fmt::Display for Error {
3533
impl std::error::Error for Error {
3634
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
3735
match self {
38-
Error::Serialize(e) => Some(e),
3936
Error::Deserialize(e) => Some(e),
4037
Error::UnknownShortID(_) => None,
4138
}
4239
}
4340
}
4441

4542
/// Serialize a [`NetworkMessage`] into a buffer.
46-
pub fn serialize(msg: NetworkMessage) -> Result<Vec<u8>, Error> {
43+
///
44+
/// This function is infallible because the underlying `consensus_encode()`
45+
/// operations only fail on I/O errors, which cannot occur when writing to an in-memory `Vec<u8>`.
46+
pub fn serialize(msg: NetworkMessage) -> Vec<u8> {
4747
let mut buffer = Vec::new();
4848
match &msg {
4949
NetworkMessage::Addr(_) => {
@@ -142,7 +142,7 @@ pub fn serialize(msg: NetworkMessage) -> Result<Vec<u8>, Error> {
142142
buffer.push(0u8);
143143
msg.command()
144144
.consensus_encode(&mut buffer)
145-
.map_err(Error::Serialize)?;
145+
.expect("Encoding to Vec<u8> never fails");
146146
}
147147
NetworkMessage::Unknown {
148148
command,
@@ -151,14 +151,14 @@ pub fn serialize(msg: NetworkMessage) -> Result<Vec<u8>, Error> {
151151
buffer.push(0u8);
152152
command
153153
.consensus_encode(&mut buffer)
154-
.map_err(Error::Serialize)?;
154+
.expect("Encoding to Vec<u8> never fails");
155155
}
156156
}
157157

158158
msg.consensus_encode(&mut buffer)
159-
.map_err(Error::Serialize)?;
159+
.expect("Encoding to Vec<u8> never fails");
160160

161-
Ok(buffer)
161+
buffer
162162
}
163163

164164
/// Deserialize v2 message into [`NetworkMessage`].

protocol/tests/round_trips.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ fn regtest_handshake() {
271271
start_height: 0,
272272
relay: false,
273273
};
274-
let message = serialize(NetworkMessage::Version(msg)).unwrap();
274+
let message = serialize(NetworkMessage::Version(msg));
275275
let packet_len = bip324::OutboundCipher::encryption_buffer_len(message.len());
276276
let mut packet = vec![0u8; packet_len];
277277
encrypter

proxy/src/bin/proxy.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ async fn v2_proxy(
114114
msg.command()
115115
);
116116

117-
let contents = serialize(msg).expect("serialize-able contents into network message");
117+
let contents = serialize(msg);
118118
v2_remote_writer
119119
.encrypt_and_write(&contents, &mut remote_writer)
120120
.await

0 commit comments

Comments
 (0)