I have input handlers that parse TCP packets (packet come to handler as Vec<u8>
). I want to make this process more consice and handy, so I am looking for de-/serializer for Vec<u8>
to deserialize cases like this:
let mut reader = Cursor::new(input.data.as_ref().unwrap()[2..].to_vec());
let code = reader.read_u8()?;
let mut server_ephemeral = vec![0u8; 32];
reader.read_exact(&mut server_ephemeral)?;
let g_len = reader.read_u8()?;
let mut g: Vec<u8> = vec![0u8; g_len as usize];
reader.read_exact(&mut g)?;
let n_len = reader.read_u8()?;
let mut n: Vec<u8> = vec![0u8; n_len as usize];
reader.read_exact(&mut n)?;
let mut salt = vec![0u8; 32];
reader.read_exact(&mut salt)?;
or serialize cases like this into json string:
let mut header = Vec::new();
header.write_u8(Opcode::LOGIN_PROOF)?;
let mut body = Vec::new();
body.write_all(&srp_client.public_ephemeral())?;
body.write_all(&proof)?;
body.write_all(&crc_hash)?;
body.write_u8(0)?; // number of keys
body.write_u8(0)?; // security flags
Do somebody know if there some library to solve cases like this ? I need deserializer that will consider that I use read_until
or read_exact
.