netlink_packet_generic/
buffer.rs
1use crate::constants::GENL_HDRLEN;
5use crate::header::GenlHeader;
6use crate::message::GenlMessage;
7use netlink_packet_utils::{DecodeError, Parseable, ParseableParametrized};
8use std::fmt::Debug;
9
10buffer!(GenlBuffer(GENL_HDRLEN) {
11 cmd: (u8, 0),
12 version: (u8, 1),
13 payload: (slice, GENL_HDRLEN..),
14});
15
16impl<'a, F, T> ParseableParametrized<GenlBuffer<&'a T>, u16> for GenlMessage<F>
17where
18 F: ParseableParametrized<[u8], GenlHeader> + Debug,
19 T: AsRef<[u8]> + ?Sized,
20 F::Error: Into<DecodeError>,
21{
22 type Error = DecodeError;
23 fn parse_with_param(buf: &GenlBuffer<&'a T>, message_type: u16) -> Result<Self, DecodeError> {
24 let header = GenlHeader::parse(buf)?;
25 let payload_buf = buf.payload();
26 Ok(GenlMessage::new(
27 header,
28 F::parse_with_param(payload_buf, header).map_err(|err| err.into())?,
29 message_type,
30 ))
31 }
32}