Add packet enums

This commit is contained in:
Denis Drakhnia 2023-10-17 14:25:13 +03:00
parent 1a565872d7
commit ce742f091d
3 changed files with 46 additions and 4 deletions

View File

@ -60,6 +60,26 @@ impl<'a> AdminCommand<'a> {
}
}
#[derive(Clone, Debug, PartialEq)]
pub enum Packet<'a> {
AdminChallenge(AdminChallenge),
AdminCommand(AdminCommand<'a>),
}
impl<'a> Packet<'a> {
pub fn decode(src: &'a [u8]) -> Result<Self, Error> {
if let Ok(p) = AdminChallenge::decode(src) {
return Ok(Self::AdminChallenge(p));
}
if let Ok(p) = AdminCommand::decode(src) {
return Ok(Self::AdminCommand(p));
}
Err(Error::InvalidPacket)
}
}
#[cfg(test)]
mod tests {
use super::*;

View File

@ -323,10 +323,7 @@ macro_rules! impl_put {
impl<'a> CursorMut<'a> {
pub fn new(buffer: &'a mut [u8]) -> Self {
let (buffer, buffer_mut) = buffer.split_at_mut(0);
Self {
buffer,
buffer_mut,
}
Self { buffer, buffer_mut }
}
pub fn buffer(&self) -> &'a [u8] {

View File

@ -133,6 +133,31 @@ impl AdminChallengeResponse {
}
}
#[derive(Clone, Debug, PartialEq)]
pub enum Packet<'a> {
ChallengeResponse(ChallengeResponse),
QueryServersResponse(QueryServersResponse<&'a [u8]>),
AdminChallengeResponse(AdminChallengeResponse),
}
impl<'a> Packet<'a> {
pub fn decode(src: &'a [u8]) -> Result<Self, Error> {
if let Ok(p) = ChallengeResponse::decode(src) {
return Ok(Self::ChallengeResponse(p));
}
if let Ok(p) = QueryServersResponse::decode(src) {
return Ok(Self::QueryServersResponse(p));
}
if let Ok(p) = AdminChallengeResponse::decode(src) {
return Ok(Self::AdminChallengeResponse(p));
}
Err(Error::InvalidPacket)
}
}
#[cfg(test)]
mod tests {
use super::*;