7 releases (4 breaking)
0.5.0 | Nov 5, 2024 |
---|---|
0.4.1 | Aug 8, 2024 |
0.3.1 | Oct 10, 2024 |
0.3.0 | Jan 31, 2024 |
0.1.0 | Mar 5, 2023 |
#58 in #io-error
325 downloads per month
Used in 4 crates
23KB
336 lines
Helper macros to make ser/deser binary protocols easier
LocatedError: For a given error enum {Name} generate a struct called Located{Name} that
carries the Span
(the error location in the input stream) info along the
error. Additionally, generates From
for nom
library errors, external,
and another located errors.
use netgauze_serde_macros::LocatedError;
#[derive(LocatedError, Eq, PartialEq, Clone, Debug)]
pub enum ExtendedCommunityParsingError {
NomError(#[from_nom] nom::error::ErrorKind),
CommunityError(#[from_located(module = "self")] CommunityParsingError),
UndefinedCapabilityCode(#[from_external] UndefinedBgpCapabilityCode),
}
#[derive(LocatedError, Eq, PartialEq, Clone, Debug)]
pub enum CommunityParsingError {
NomError(#[from_nom] nom::error::ErrorKind),
}
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
pub struct UndefinedBgpCapabilityCode(pub u8);
fn test() {
let span = Span::new(&[1, 2, 3]);
// LocatedExtendedCommunityParsingError is generated by LocatedError
let _located = LocatedExtendedCommunityParsingError::new(
span,
ExtendedCommunityParsingError::UndefinedCapabilityCode(UndefinedBgpCapabilityCode(1)));
}
WritingError: Decorate an enum
as an error for serializing binary protocol
provides the following decorations for any members of the enum.
#[from_std_io_error]
automatically generateFrom
implementation fromstd::io::Error
to aString
.#[from]
, automatically generates aFrom
implementation for a given type.
Example:
use netgauze_serde_macros::WritingError;
#[derive(WritingError, Eq, PartialEq, Clone, Debug)]
pub enum BgpMessageWritingError {
/// std::io::Error will be converted to this value
StdIOError(#[from_std_io_error] String),
/// BgpOpenMessageWritingError will be converted to this value
OpenError(#[from] BgpOpenMessageWritingError),
}
Dependencies
~250–700KB
~17K SLoC