1use std::ops::{Deref, DerefMut};
2
3pub trait IoctlRequestContent {
6 fn get_bin_size(&self) -> u32;
8}
9
10impl IoctlRequestContent for () {
11 fn get_bin_size(&self) -> u32 {
12 0
13 }
14}
15
16#[binrw::binrw]
17#[derive(Debug, PartialEq, Eq)]
18pub struct IoctlBuffer {
19 #[br(parse_with = binrw::helpers::until_eof)]
20 buffer: Vec<u8>,
21}
22
23impl From<Vec<u8>> for IoctlBuffer {
24 fn from(buffer: Vec<u8>) -> Self {
25 Self { buffer }
26 }
27}
28
29impl From<&[u8]> for IoctlBuffer {
30 fn from(buffer: &[u8]) -> Self {
31 Self {
32 buffer: buffer.to_vec(),
33 }
34 }
35}
36
37impl IoctlRequestContent for IoctlBuffer {
38 fn get_bin_size(&self) -> u32 {
39 self.len() as u32
40 }
41}
42
43impl Deref for IoctlBuffer {
44 type Target = Vec<u8>;
45
46 fn deref(&self) -> &Self::Target {
47 &self.buffer
48 }
49}
50
51impl DerefMut for IoctlBuffer {
52 fn deref_mut(&mut self) -> &mut Self::Target {
53 &mut self.buffer
54 }
55}