rtnetlink/
macros.rs

1// SPDX-License-Identifier: MIT
2
3#[macro_export]
4macro_rules! try_rtnl {
5    ($msg: expr, $message_type:path) => {{
6        use netlink_packet_route::{NetlinkMessage, NetlinkPayload, RtnlMessage};
7        use $crate::Error;
8
9        let (header, payload) = $msg.into_parts();
10        match payload {
11            NetlinkPayload::InnerMessage($message_type(msg)) => msg,
12            NetlinkPayload::Error(err) => return Err(Error::NetlinkError(err)),
13            _ => {
14                return Err(Error::UnexpectedMessage(NetlinkMessage::new(
15                    header, payload,
16                )))
17            }
18        }
19    }};
20}
21
22#[macro_export]
23macro_rules! try_nl {
24    ($msg: expr) => {{
25        use netlink_packet_route::NetlinkPayload;
26        use $crate::Error;
27        if let NetlinkPayload::Error(err) = $msg.payload {
28            return Err(Error::NetlinkError(err));
29        }
30    }};
31}