Header deserialization

This commit is contained in:
Jędrzej Stuczyński
2022-04-27 10:18:55 +01:00
parent 1f0360c828
commit 1efc0847b5
+50 -16
View File
@@ -5,6 +5,22 @@ use crate::dkg::error::DkgError;
use bytes::{BufMut, BytesMut};
use crypto::asymmetric::identity;
use dkg::Dealing;
use std::io;
pub enum OffchainDkgMessage {
NewDealing {
id: u64,
message: NewDealingMessage,
},
RemoteDealingRequest {
id: u64,
message: RemoteDealingRequestMessage,
},
RemoteDealingResponse {
id: u64,
message: RemoteDealingResponseMessage,
},
}
pub struct NewDealingMessage {
epoch_id: u32,
@@ -28,21 +44,6 @@ pub enum RemoteDealingResponseMessage {
Unavailable,
}
pub enum OffchainDkgMessage {
NewDealing {
id: u64,
message: NewDealingMessage,
},
RemoteDealingRequest {
id: u64,
message: RemoteDealingRequestMessage,
},
RemoteDealingResponse {
id: u64,
message: RemoteDealingResponseMessage,
},
}
impl OffchainDkgMessage {
fn frame(self) -> FramedOffchainDkgMessage {
todo!()
@@ -110,6 +111,7 @@ impl FramedOffchainDkgMessage {
}
}
#[derive(Debug, Copy, Clone, PartialEq)]
pub(crate) struct Header {
pub(crate) message_type: OffchainDkgMessageType,
pub(crate) payload_length: u64,
@@ -130,6 +132,38 @@ impl Header {
}
pub(crate) fn try_from_bytes(bytes: &[u8]) -> Result<Self, DkgError> {
todo!()
if bytes.len() != Self::LEN {
return Err(DkgError::Networking(io::Error::new(
io::ErrorKind::InvalidData,
format!(
"OffchainDkgMessageType::Header: got {} bytes, expected: {}",
bytes.len(),
Self::LEN
),
)));
}
Ok(Header {
message_type: OffchainDkgMessageType::try_from(bytes[0])?,
payload_length: u64::from_be_bytes(bytes[1..9].try_into().unwrap()),
protocol_version: u32::from_be_bytes(bytes[9..].try_into().unwrap()),
})
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::dkg::networking::PROTOCOL_VERSION;
#[test]
fn header_deserialization() {
let valid_header = Header {
message_type: OffchainDkgMessageType::NewDealing,
payload_length: 1234,
protocol_version: PROTOCOL_VERSION,
};
let bytes = valid_header.to_bytes();
assert_eq!(valid_header, Header::try_from_bytes(&bytes).unwrap())
}
}