2023-04-30 19:32:35 +02:00
|
|
|
use std::io::Read;
|
|
|
|
|
|
2023-04-29 22:17:12 +02:00
|
|
|
use byteorder::{LittleEndian, ReadBytesExt};
|
|
|
|
|
use serde::Serialize;
|
2023-04-29 22:29:52 +02:00
|
|
|
use serde_with::serde_as;
|
2023-04-29 22:17:12 +02:00
|
|
|
|
|
|
|
|
use crate::result::Result;
|
|
|
|
|
|
2023-04-29 22:29:52 +02:00
|
|
|
#[serde_as]
|
2023-04-29 22:17:12 +02:00
|
|
|
#[derive(Debug, Serialize)]
|
|
|
|
|
pub enum EntityMethod {
|
2023-04-30 19:32:35 +02:00
|
|
|
Subtype2F {
|
|
|
|
|
// prefix: [u8; 9],
|
|
|
|
|
},
|
2023-04-29 22:17:12 +02:00
|
|
|
|
2023-04-30 19:32:35 +02:00
|
|
|
/// Default variant when subtype is not known by the parser.
|
2023-04-29 22:29:52 +02:00
|
|
|
Unknown {
|
|
|
|
|
sub_type: u32,
|
|
|
|
|
|
2023-04-29 22:32:46 +02:00
|
|
|
/// Whole packet payload (including the sub-type).
|
2023-04-29 22:29:52 +02:00
|
|
|
#[serde_as(as = "serde_with::hex::Hex")]
|
|
|
|
|
payload: Vec<u8>,
|
|
|
|
|
},
|
2023-04-29 22:17:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl EntityMethod {
|
|
|
|
|
pub fn new(payload: Vec<u8>) -> Result<Self> {
|
|
|
|
|
let mut reader = payload.as_slice();
|
|
|
|
|
|
|
|
|
|
reader.read_u32::<LittleEndian>()?;
|
|
|
|
|
let sub_type = reader.read_u32::<LittleEndian>()?;
|
|
|
|
|
|
|
|
|
|
let this = match sub_type {
|
2023-04-30 19:32:35 +02:00
|
|
|
0x2F => {
|
|
|
|
|
// let mut prefix = [0; 9];
|
|
|
|
|
// reader.read_exact(&mut prefix)?;
|
|
|
|
|
Self::Subtype2F {}
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-29 22:17:12 +02:00
|
|
|
_ => Self::Unknown { sub_type, payload },
|
|
|
|
|
};
|
|
|
|
|
Ok(this)
|
|
|
|
|
}
|
|
|
|
|
}
|