Gz encode+decode datagrams
This commit is contained in:
parent
9ec70ab6db
commit
a2e25d1c3f
@ -5,6 +5,7 @@ edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
ciborium = "0.2.2"
|
||||
flate2 = "1.1.9"
|
||||
serde = "1.0.228"
|
||||
thiserror = "2.0.18"
|
||||
## Make it easier to generate errors
|
||||
|
||||
@ -6,6 +6,7 @@ use std::{
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
|
||||
use flate2::{Compression, write::GzEncoder};
|
||||
use serde::{Serialize, de::DeserializeOwned};
|
||||
use thiserror::Error;
|
||||
|
||||
@ -482,7 +483,8 @@ impl UdpWrapper {
|
||||
if let Some(socket) = &self.socket {
|
||||
let mut buf = Vec::new();
|
||||
let cursor = Cursor::new(&mut buf);
|
||||
ciborium::into_writer(&package, cursor)
|
||||
let encoder = GzEncoder::new(cursor, Compression::fast());
|
||||
ciborium::into_writer(&package, encoder)
|
||||
.map_err(|err| SendError::SerializationError(err))?;
|
||||
if buf.len() > DATAGRAM_SIZE {
|
||||
return Err(SendError::DatagramTooLarge(buf.len()));
|
||||
|
||||
@ -5,6 +5,7 @@ use std::{
|
||||
sync::{Arc, mpsc::Sender},
|
||||
};
|
||||
|
||||
use flate2::read::GzDecoder;
|
||||
use serde::{Serialize, de::DeserializeOwned};
|
||||
use thiserror::Error;
|
||||
|
||||
@ -35,9 +36,10 @@ impl<'a, T: Clone + Serialize + DeserializeOwned> Listener<T> {
|
||||
match self.socket.recv_from(&mut buffer) {
|
||||
Ok((num_bytes, from_addr)) => {
|
||||
let mut ciborium_buf: Datagram = [0; _];
|
||||
let bytes = Cursor::new(&mut buffer[..num_bytes]);
|
||||
let cursor = Cursor::new(&mut buffer[..num_bytes]);
|
||||
let decoder = GzDecoder::new(cursor);
|
||||
let res =
|
||||
ciborium::from_reader_with_buffer::<Package<T>, _>(bytes, &mut ciborium_buf);
|
||||
ciborium::from_reader_with_buffer::<Package<T>, _>(decoder, &mut ciborium_buf);
|
||||
match res {
|
||||
Ok(pkg) => self
|
||||
.sender
|
||||
|
||||
Loading…
Reference in New Issue
Block a user