|
2 | 2 |
|
3 | 3 | use std::fmt::Debug;
|
4 | 4 |
|
5 |
| -use anyhow::Context; |
6 | 5 | use netlink_packet_utils::DecodeError;
|
7 | 6 |
|
8 | 7 | use crate::{
|
@@ -83,40 +82,41 @@ where
|
83 | 82 | }
|
84 | 83 | }
|
85 | 84 |
|
86 |
| -impl<'buffer, B, I> Parseable<NetlinkBuffer<&'buffer B>> for NetlinkMessage<I> |
| 85 | +impl<B, I> Parseable<NetlinkBuffer<&B>> for NetlinkMessage<I> |
87 | 86 | where
|
88 |
| - B: AsRef<[u8]> + 'buffer, |
| 87 | + B: AsRef<[u8]>, |
89 | 88 | I: NetlinkDeserializable,
|
90 | 89 | {
|
91 |
| - fn parse(buf: &NetlinkBuffer<&'buffer B>) -> Result<Self, DecodeError> { |
| 90 | + type Error = DecodeError; |
| 91 | + |
| 92 | + fn parse(buf: &NetlinkBuffer<&B>) -> Result<Self, Self::Error> { |
92 | 93 | use self::NetlinkPayload::*;
|
93 | 94 |
|
94 | 95 | let header =
|
95 |
| - <NetlinkHeader as Parseable<NetlinkBuffer<&'buffer B>>>::parse(buf) |
96 |
| - .context("failed to parse netlink header")?; |
| 96 | + <NetlinkHeader as Parseable<NetlinkBuffer<&B>>>::parse(buf)?; |
97 | 97 |
|
98 | 98 | let bytes = buf.payload();
|
99 | 99 | let payload = match header.message_type {
|
100 | 100 | NLMSG_ERROR => {
|
101 | 101 | let msg = ErrorBuffer::new_checked(&bytes)
|
102 |
| - .and_then(|buf| ErrorMessage::parse(&buf)) |
103 |
| - .context("failed to parse NLMSG_ERROR")?; |
| 102 | + .and_then(|buf| ErrorMessage::parse(&buf))?; |
104 | 103 | Error(msg)
|
105 | 104 | }
|
106 | 105 | NLMSG_NOOP => Noop,
|
107 | 106 | NLMSG_DONE => {
|
108 | 107 | let msg = DoneBuffer::new_checked(&bytes)
|
109 |
| - .and_then(|buf| DoneMessage::parse(&buf)) |
110 |
| - .context("failed to parse NLMSG_DONE")?; |
| 108 | + .and_then(|buf| DoneMessage::parse(&buf))?; |
111 | 109 | Done(msg)
|
112 | 110 | }
|
113 | 111 | NLMSG_OVERRUN => Overrun(bytes.to_vec()),
|
114 |
| - message_type => { |
115 |
| - let inner_msg = I::deserialize(&header, bytes).context( |
116 |
| - format!("Failed to parse message with type {message_type}"), |
117 |
| - )?; |
118 |
| - InnerMessage(inner_msg) |
119 |
| - } |
| 112 | + message_type => match I::deserialize(&header, bytes) { |
| 113 | + Err(e) => { |
| 114 | + return Err(DecodeError::Other( |
| 115 | + format!("Failed to parse message with type {message_type}: {e}").into()), |
| 116 | + ); |
| 117 | + } |
| 118 | + Ok(inner_msg) => InnerMessage(inner_msg), |
| 119 | + }, |
120 | 120 | };
|
121 | 121 | Ok(NetlinkMessage { header, payload })
|
122 | 122 | }
|
|
0 commit comments