netlink_packet_route/rule/
uid_range.rs

1// SPDX-License-Identifier: MIT
2
3use netlink_packet_core::{DecodeError, Emitable};
4
5const RULE_UID_RANGE_LEN: usize = 8;
6
7#[derive(Clone, Eq, PartialEq, Debug, Copy)]
8pub struct RuleUidRange {
9    pub start: u32,
10    pub end: u32,
11}
12
13impl RuleUidRange {
14    pub(crate) fn parse(buf: &[u8]) -> Result<Self, DecodeError> {
15        if buf.len() == RULE_UID_RANGE_LEN {
16            Ok(Self {
17                start: u32::from_ne_bytes([buf[0], buf[1], buf[2], buf[3]]),
18                end: u32::from_ne_bytes([buf[4], buf[5], buf[6], buf[7]]),
19            })
20        } else {
21            Err(DecodeError::from(format!(
22                "Invalid rule port range data, expecting {RULE_UID_RANGE_LEN} \
23                 u8 array, but got {buf:?}"
24            )))
25        }
26    }
27}
28
29impl Emitable for RuleUidRange {
30    fn buffer_len(&self) -> usize {
31        RULE_UID_RANGE_LEN
32    }
33
34    fn emit(&self, buffer: &mut [u8]) {
35        buffer[0..4].copy_from_slice(&self.start.to_ne_bytes());
36        buffer[4..8].copy_from_slice(&self.end.to_ne_bytes());
37    }
38}