diff --git a/Cargo.toml b/Cargo.toml index 503eaae..a881670 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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 diff --git a/src/connections.rs b/src/connections.rs index f4aa184..fb3b956 100644 --- a/src/connections.rs +++ b/src/connections.rs @@ -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())); diff --git a/src/listener.rs b/src/listener.rs index de0784b..0907c12 100644 --- a/src/listener.rs +++ b/src/listener.rs @@ -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 { 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::, _>(bytes, &mut ciborium_buf); + ciborium::from_reader_with_buffer::, _>(decoder, &mut ciborium_buf); match res { Ok(pkg) => self .sender