| Crates.io | message-packetizer |
| lib.rs | message-packetizer |
| version | 0.1.0 |
| created_at | 2024-12-24 11:57:53.441076+00 |
| updated_at | 2024-12-24 11:57:53.441076+00 |
| description | Sign and packetize structs messages over SRT |
| homepage | |
| repository | https://github.com/wavey-ai/message-packetizer |
| max_upload_size | |
| id | 1493836 |
| size | 47,256 |
A Rust library for signing, packetizing, and transmitting messages over SRT (Secure Reliable Transport). This library provides secure message signing and efficient packet handling for large messages that need to be split across multiple SRT packets.
SignableMessage traitAdd this to your Cargo.toml:
[dependencies]
message-packetizer = "0.1.0" # Replace with actual version
use srt_message_signer::{MessageSigner, SignableMessage};
use serde::{Serialize, Deserialize};
// Define your custom message type
#[derive(Serialize, Deserialize)]
struct MyMessage {
content: String,
}
// Implement SignableMessage for your type
impl SignableMessage for MyMessage {}
// Create a message signer
let mut signer = MessageSigner::new(&private_key_pem)?;
// Sign a message
let message = MyMessage {
content: "Hello, World!".to_string()
};
let signed_envelope = signer.sign(&message)?;
// Verify and decode a message
let decoded: MyMessage = signer.verify(&signed_envelope)?;
// Create a demuxer for handling incoming packets
let mut demuxer = SignedMessageDemuxer::new();
// Split a large message into packets for transmission
let packets = signed_envelope.to_packets();
// Process received packets
for packet in received_packets {
let result = demuxer.process_packet(&packet);
// Handle any completed messages
for message in result.messages {
let decoded: MyMessage = signer.verify(&message)?;
// Process the decoded message
}
// Handle any errors
for error in result.errors {
// Handle error
}
}
#[derive(Serialize, Deserialize)]
struct ValidatedMessage {
value: i32,
}
impl SignableMessage for ValidatedMessage {
fn validate(&self) -> Result<(), Box<dyn Error>> {
if self.value < 0 {
return Err("Value must be non-negative".into());
}
Ok(())
}
}
The library provides detailed error types for various failure scenarios:
DemuxError::InvalidPacket: Malformed or too small packetsDemuxError::MessageCorrupted: Issues with packet sequencing or duplicatesDemuxError::EnvelopeParseError: Problems parsing reassembled messagesBytesMut for optimal buffer managementMIT