aboutsummaryrefslogtreecommitdiffstats
path: root/src/transport/wire.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-31 04:50:14 +0100
committertv <tv@krebsco.de>2026-10-31 04:50:14 +0100
commitaaeb05c716cb746ee7c746f4eefa75ebba3f703e (patch)
tree100699e987196e217795dcded182b5e0ebb3a413 /src/transport/wire.rs
parent3a4f0c0413f7e4eef5313882a7bcc43193166bbb (diff)
unify wire encoder
Diffstat (limited to 'src/transport/wire.rs')
-rw-r--r--src/transport/wire.rs17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/transport/wire.rs b/src/transport/wire.rs
index 40e32a2..28bd431 100644
--- a/src/transport/wire.rs
+++ b/src/transport/wire.rs
@@ -10,7 +10,7 @@
use thiserror::Error;
-use super::{MessageKind, ParsedMessage};
+use super::{EncodedMessage, MessageKind, ParsedMessage};
/// The wire format's version, the first byte of every payload. Bump it with every change
/// to a message type or a codec (`golden_bytes` fails then).
@@ -52,6 +52,21 @@ pub(crate) enum WireError {
Decode(#[from] rmp_serde::decode::Error),
}
+/// `message` to `peer`, encoded as it goes on the wire alone (no envelope: libp2p,
+/// Tor, the simulator); `peer` is its address too.
+#[cfg_attr(not(any(feature = "libp2p", feature = "tor", test)), allow(dead_code))]
+pub(crate) fn encoded(peer: &str, message: &ParsedMessage) -> anyhow::Result<EncodedMessage> {
+ let body = encode(message)?;
+ Ok(EncodedMessage {
+ peer: peer.to_owned(),
+ address: peer.to_owned(),
+ payload_len: body.len(),
+ body: body.into(),
+ kind: message.kind(),
+ message: None,
+ })
+}
+
/// The payload of `message`.
pub(crate) fn encode(message: &ParsedMessage) -> Result<Vec<u8>, WireError> {
let mut payload = vec![VERSION, tag(message.kind())];