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