diff options
| author | tv <tv@krebsco.de> | 2026-10-31 04:50:14 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-31 04:50:14 +0100 |
| commit | aaeb05c716cb746ee7c746f4eefa75ebba3f703e (patch) | |
| tree | 100699e987196e217795dcded182b5e0ebb3a413 /src/transport/wire.rs | |
| parent | 3a4f0c0413f7e4eef5313882a7bcc43193166bbb (diff) | |
unify wire encoder
Diffstat (limited to 'src/transport/wire.rs')
| -rw-r--r-- | src/transport/wire.rs | 17 |
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())]; |
