use netlink_packet_core::{NetlinkMessage, NetlinkPayload};
use netlink_packet_route::RouteNetlinkMessage;
use super::{NetlinkResponse, Result};
pub trait NetlinkMessageHandler {
type Response;
fn handle_payload(
&self,
payload: NetlinkPayload<RouteNetlinkMessage>,
) -> Result<NetlinkResponse<Self::Response>>;
}
pub trait Client {
fn send(&mut self, req: &NetlinkMessage<RouteNetlinkMessage>) -> Result<()>;
fn receive<T, H>(&mut self, handler: H) -> Result<T>
where
H: NetlinkMessageHandler<Response = T>;
fn receive_multiple<T, H>(&mut self, handler: H) -> Result<Vec<T>>
where
H: NetlinkMessageHandler<Response = T>;
fn send_and_receive<T, H>(
&mut self,
req: &NetlinkMessage<RouteNetlinkMessage>,
handler: H,
) -> Result<T>
where
H: NetlinkMessageHandler<Response = T>;
fn send_and_receive_multiple<T, H>(
&mut self,
req: &NetlinkMessage<RouteNetlinkMessage>,
handler: H,
) -> Result<Vec<T>>
where
H: NetlinkMessageHandler<Response = T>,
{
self.send(req)?;
self.receive_multiple(handler)
}
}