mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@ -8,6 +8,7 @@ use crate::{
|
||||
Capability, EthMessageID, EthVersion,
|
||||
};
|
||||
use alloy_primitives::bytes::Bytes;
|
||||
use alloy_rlp::{BufMut, Decodable, Encodable};
|
||||
use derive_more::{Deref, DerefMut};
|
||||
use std::{
|
||||
borrow::Cow,
|
||||
@ -40,6 +41,30 @@ impl RawCapabilityMessage {
|
||||
}
|
||||
}
|
||||
|
||||
impl Encodable for RawCapabilityMessage {
|
||||
/// Encodes the `RawCapabilityMessage` into an RLP byte stream.
|
||||
fn encode(&self, out: &mut dyn BufMut) {
|
||||
self.id.encode(out);
|
||||
out.put_slice(&self.payload);
|
||||
}
|
||||
|
||||
/// Returns the total length of the encoded message.
|
||||
fn length(&self) -> usize {
|
||||
self.id.length() + self.payload.len()
|
||||
}
|
||||
}
|
||||
|
||||
impl Decodable for RawCapabilityMessage {
|
||||
/// Decodes a `RawCapabilityMessage` from an RLP byte stream.
|
||||
fn decode(buf: &mut &[u8]) -> alloy_rlp::Result<Self> {
|
||||
let id = usize::decode(buf)?;
|
||||
let payload = Bytes::copy_from_slice(buf);
|
||||
*buf = &buf[buf.len()..];
|
||||
|
||||
Ok(Self { id, payload })
|
||||
}
|
||||
}
|
||||
|
||||
/// This represents a shared capability, its version, and its message id offset.
|
||||
///
|
||||
/// The [offset](SharedCapability::message_id_offset) is the message ID offset for this shared
|
||||
@ -383,6 +408,8 @@ pub struct UnsupportedCapabilityError {
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::{Capabilities, Capability};
|
||||
use alloy_primitives::bytes::Bytes;
|
||||
use alloy_rlp::{Decodable, Encodable};
|
||||
|
||||
#[test]
|
||||
fn from_eth_68() {
|
||||
@ -542,4 +569,19 @@ mod tests {
|
||||
let shared_eth = shared.find_by_relative_offset(1 + proto.messages()).unwrap();
|
||||
assert_eq!(shared_eth.name(), "eth");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_raw_capability_rlp() {
|
||||
let msg = RawCapabilityMessage { id: 1, payload: Bytes::from(vec![0x01, 0x02, 0x03]) };
|
||||
|
||||
// Encode the message into bytes
|
||||
let mut encoded = Vec::new();
|
||||
msg.encode(&mut encoded);
|
||||
|
||||
// Decode the bytes back into RawCapbailitMessage
|
||||
let decoded = RawCapabilityMessage::decode(&mut &encoded[..]).unwrap();
|
||||
|
||||
// Verify that the decoded message matches the original
|
||||
assert_eq!(msg, decoded);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user