Skip to content

Commit dac6774

Browse files
committed
Add bincode derives
1 parent 2d279a2 commit dac6774

19 files changed

+105
-1
lines changed

Cargo.toml

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ keywords = ["routing", "bgp"]
1212
license = "BSD-3-Clause"
1313

1414
[dependencies]
15-
inetnum = { version = "0.1.0", features = ["arbitrary", "serde"] }
15+
# inetnum = { version = "0.1.0", features = ["arbitrary", "serde"] }
16+
inetnum = { path = "../inetnum", features = ["arbitrary", "serde", "bincode"] }
1617
arbitrary = { version = "1.3.1", optional = true, features = ["derive"] }
1718
bytes = { version = "1.2", optional = true }
1819
chrono = { version = "0.4.20", optional = true, default-features = false }
@@ -22,6 +23,7 @@ octseq = { version = "0.4.0", optional = true, features = ["bytes"] }
2223
paste = { version = "1" }
2324
serde = { version = "1.0.165", optional = true, features = ["derive"] }
2425
tokio = { version = ">=1.24.2", optional = true, features = ["io-util", "macros", "net", "sync", "rt-multi-thread", "time"] }
26+
bincode = { version = "2.0.0-rc.3", optional = true }
2527

2628
[dev-dependencies]
2729
memmap2 = "0.9"

src/bgp/aspath.rs

+4
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ pub trait SerializeForOperators: Serialize {
6363
///
6464
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
6565
#[derive(Clone, Debug, Default, Eq, PartialEq, Hash)]
66+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
6667
pub struct HopPath {
6768
/// The hops in this HopPath.
6869
hops: Vec<OwnedHop>,
@@ -803,6 +804,7 @@ impl<'a, Octs: Octets> Iterator for PathSegments<'a, Octs> {
803804
#[derive(Copy, Clone, Debug)]
804805
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
805806
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
807+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
806808
pub struct Segment<Octs> {
807809
stype: SegmentType,
808810
four_byte_asns: bool,
@@ -1028,6 +1030,7 @@ impl<Octs: Octets> fmt::Display for Segment<Octs> {
10281030
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
10291031
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
10301032
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1033+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
10311034
pub enum SegmentType {
10321035
Set,
10331036
Sequence,
@@ -1087,6 +1090,7 @@ impl fmt::Display for SegmentType {
10871090
#[derive(Copy, Clone, Debug)]
10881091
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
10891092
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
1093+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
10901094
pub enum Hop<Octs> {
10911095
Asn(Asn),
10921096
Segment(Segment<Octs>),

src/bgp/communities.rs

+6
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ pub trait SerializeForOperators: Serialize {
113113
/// Standard and Extended/Large Communities variants.
114114
#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, )]
115115
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
116+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
116117
pub enum Community {
117118
Standard(StandardCommunity),
118119
Extended(ExtendedCommunity),
@@ -260,6 +261,7 @@ impl Display for Community {
260261
/// serializing our Community type and in turn the contained routecore
261262
/// Community type and its children.
262263
#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, )]
264+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
263265
pub struct HumanReadableCommunity(pub Community);
264266

265267
impl From<Community> for HumanReadableCommunity {
@@ -484,6 +486,7 @@ wellknown!(Wellknown,
484486
#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd )]
485487
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
486488
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
489+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
487490
pub struct StandardCommunity(pub(crate) [u8; 4]);
488491

489492
impl StandardCommunity {
@@ -754,6 +757,7 @@ impl Display for Tag {
754757
#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd )]
755758
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
756759
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
760+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
757761
pub struct ExtendedCommunity([u8; 8]);
758762

759763
impl ExtendedCommunity {
@@ -1313,6 +1317,7 @@ impl SerializeForOperators for ExtendedCommunity {
13131317
#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd )]
13141318
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
13151319
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
1320+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
13161321
pub struct Ipv6ExtendedCommunity([u8; 20]);
13171322

13181323

@@ -1442,6 +1447,7 @@ impl Display for Ipv6ExtendedCommunity {
14421447
#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd )]
14431448
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
14441449
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
1450+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
14451451
pub struct LargeCommunity([u8; 12]);
14461452

14471453
impl LargeCommunity {

src/bgp/message/update.rs

+7
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use crate::util::parser::ParseError;
3434
/// BGP UPDATE message, variant of the [`Message`] enum.
3535
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3636
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
37+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
3738
pub struct UpdateMessage<Octs: Octets> {
3839
octets: Octs,
3940
withdrawals: Range<usize>,
@@ -1053,6 +1054,7 @@ impl<Octs: Octets> UpdateMessage<Octs> {
10531054
#[derive(Clone, Debug, Eq, PartialEq)]
10541055
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
10551056
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
1057+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
10561058
pub struct SessionConfig {
10571059
four_octet_asns: FourOctetAsns,
10581060
ipv4unicast_in_mp: Ipv4UnicastInMp,
@@ -1067,6 +1069,7 @@ pub struct SessionConfig {
10671069
#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
10681070
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
10691071
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
1072+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
10701073
pub struct PduParseInfo {
10711074
four_octet_asns: FourOctetAsns,
10721075
pdu_addpaths: PduAddpaths,
@@ -1163,6 +1166,7 @@ impl Default for PduParseInfo {
11631166
#[derive(Copy, Clone, Default, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
11641167
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
11651168
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
1169+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
11661170
struct PduAddpaths {
11671171
conventional: bool,
11681172
mp_reach: bool,
@@ -1193,6 +1197,7 @@ impl PduAddpaths {
11931197
#[derive(Clone, Debug, Eq, PartialEq)]
11941198
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
11951199
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
1200+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
11961201
struct SessionAddpaths(HashMap<AfiSafiType, AddpathDirection>);
11971202
impl SessionAddpaths {
11981203
fn new() -> Self {
@@ -1304,6 +1309,7 @@ impl SessionConfig {
13041309
#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
13051310
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
13061311
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
1312+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
13071313
pub struct FourOctetAsns(pub bool);
13081314

13091315
/// Indicates whether Ipv4Unicast NLRI are carried in the MP attribute.
@@ -1315,6 +1321,7 @@ pub struct FourOctetAsns(pub bool);
13151321
#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
13161322
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
13171323
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
1324+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
13181325
pub struct Ipv4UnicastInMp(pub bool);
13191326

13201327
/// Iterator for BGP UPDATE Communities.

src/bgp/message/update_builder.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1201,6 +1201,7 @@ impl<A: NlriCompose> MpUnreachNlriBuilder<A> {
12011201
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12021202
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
12031203
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
1204+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
12041205
pub struct StandardCommunitiesList {
12051206
communities: Vec<StandardCommunity>,
12061207
len: usize, // size of value, excluding path attribute flags+type_code+len

src/bgp/nlri/afisafi.rs

+38
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ macro_rules! addpath {
4747
#[derive(Copy, Clone, Debug, Hash, PartialEq, Ord, PartialOrd)]
4848
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
4949
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
50+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
5051
pub struct [<$nlri AddpathNlri>](PathId, [<$nlri Nlri>]);
5152
impl AfiSafiNlri for [<$nlri AddpathNlri>] {
5253
type Nlri = <[<$nlri Nlri>] as AfiSafiNlri>::Nlri;
@@ -64,6 +65,7 @@ macro_rules! addpath {
6465
#[derive(Clone, Debug, Hash)]
6566
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
6667
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
68+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
6769
pub struct [<$nlri AddpathNlri>]<$gen>(PathId, [<$nlri Nlri>]<$gen>);
6870
impl<$gen> AfiSafiNlri for [<$nlri AddpathNlri>]<$gen> {
6971
type Nlri = <[<$nlri Nlri>]<$gen> as AfiSafiNlri>::Nlri;
@@ -170,6 +172,7 @@ paste! {
170172
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
171173
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
172174
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
175+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
173176
pub enum AfiSafiType {
174177
$( $( [<$afi_name $safi_name>] ,)+)+
175178
Unsupported(u16, u8),
@@ -331,6 +334,7 @@ paste! {
331334
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
332335
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
333336
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
337+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
334338
pub enum NlriType {
335339
$($(
336340
[<$afi_name $safi_name>],
@@ -518,6 +522,27 @@ impl Nlri<&[u8]> {
518522
}
519523
}
520524

525+
#[cfg(feature = "bincode")]
526+
impl<Octs: Octets> bincode::Encode for Nlri<Octs> {
527+
fn encode<E: bincode::enc::Encoder>(&self, encoder: &mut E) -> Result<(), bincode::error::EncodeError> {
528+
todo!()
529+
}
530+
}
531+
532+
#[cfg(feature = "bincode")]
533+
impl<Octs: Octets> bincode::Decode for Nlri<Octs> {
534+
fn decode<D: bincode::de::Decoder>(decoder: &mut D) -> Result<Self, bincode::error::DecodeError> {
535+
todo!()
536+
}
537+
}
538+
539+
#[cfg(feature = "bincode")]
540+
impl<'de, Octs: Octets> bincode::BorrowDecode<'de> for Nlri<Octs> {
541+
fn borrow_decode<D: bincode::de::BorrowDecoder<'de>>(decoder: &mut D) -> Result<Self, bincode::error::DecodeError> {
542+
todo!()
543+
}
544+
}
545+
521546
//------------ Traits ---------------------------------------------------------
522547

523548
/// A type characterized by an AFI and SAFI.
@@ -640,6 +665,7 @@ afisafi! {
640665
#[derive(Copy, Clone, Debug, Hash, PartialEq, Ord, PartialOrd)]
641666
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
642667
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
668+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
643669
pub struct Ipv4UnicastNlri(Prefix);
644670

645671
impl AfiSafiNlri for Ipv4UnicastNlri {
@@ -708,6 +734,7 @@ impl NlriCompose for Ipv4UnicastNlri {
708734
#[derive(Copy, Clone, Debug, Hash, PartialEq, Ord, PartialOrd)]
709735
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
710736
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
737+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
711738
pub struct Ipv4MulticastNlri(Prefix);
712739

713740
impl AfiSafiNlri for Ipv4MulticastNlri {
@@ -775,6 +802,7 @@ impl NlriCompose for Ipv4MulticastNlri {
775802
#[derive(Copy, Clone, Debug, Hash)]
776803
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
777804
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
805+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
778806
pub struct Ipv4MplsUnicastNlri<Octs>(MplsNlri<Octs>);
779807

780808
impl<Octs> AfiSafiNlri for Ipv4MplsUnicastNlri<Octs> {
@@ -850,6 +878,7 @@ impl<Octs: AsRef<[u8]>> Ord for Ipv4MplsUnicastNlri<Octs> {
850878
#[derive(Copy, Clone, Debug, Hash)]
851879
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
852880
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
881+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
853882
pub struct Ipv4MplsVpnUnicastNlri<Octs>(MplsVpnNlri<Octs>);
854883

855884
impl<Octs> AfiSafiNlri for Ipv4MplsVpnUnicastNlri<Octs> {
@@ -924,6 +953,7 @@ impl<Octs: AsRef<[u8]>> Ord for Ipv4MplsVpnUnicastNlri<Octs> {
924953
#[derive(Clone, Debug, Hash)]
925954
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
926955
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
956+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
927957
pub struct Ipv4RouteTargetNlri<Octs>(RouteTargetNlri<Octs>);
928958

929959
impl<Octs> AfiSafiNlri for Ipv4RouteTargetNlri<Octs> {
@@ -996,6 +1026,7 @@ impl<Octs: AsRef<[u8]>> Ord for Ipv4RouteTargetNlri<Octs> {
9961026
#[derive(Clone, Debug, Hash)]
9971027
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
9981028
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1029+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
9991030
pub struct Ipv4FlowSpecNlri<Octs>(FlowSpecNlri<Octs>);
10001031

10011032
impl<Octs> AfiSafiNlri for Ipv4FlowSpecNlri<Octs> {
@@ -1082,6 +1113,7 @@ impl<Octs: AsRef<[u8]>> Ord for Ipv4FlowSpecNlri<Octs> {
10821113
#[derive(Copy, Clone, Debug, Hash, PartialEq, Ord, PartialOrd)]
10831114
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
10841115
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1116+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
10851117
pub struct Ipv6UnicastNlri(Prefix);
10861118
impl AfiSafiNlri for Ipv6UnicastNlri {
10871119
type Nlri = Prefix;
@@ -1148,6 +1180,7 @@ impl NlriCompose for Ipv6UnicastNlri {
11481180
#[derive(Copy, Clone, Debug, Hash, PartialEq, Ord, PartialOrd)]
11491181
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
11501182
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1183+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
11511184
pub struct Ipv6MulticastNlri(Prefix);
11521185

11531186
impl FromStr for Ipv6MulticastNlri {
@@ -1215,6 +1248,7 @@ impl NlriCompose for Ipv6MulticastNlri {
12151248
#[derive(Copy, Clone, Debug, Hash)]
12161249
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
12171250
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1251+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
12181252
pub struct Ipv6MplsUnicastNlri<Octs>(MplsNlri<Octs>);
12191253

12201254
impl<Octs> AfiSafiNlri for Ipv6MplsUnicastNlri<Octs> {
@@ -1291,6 +1325,7 @@ impl<Octs: AsRef<[u8]>> Ord for Ipv6MplsUnicastNlri<Octs> {
12911325
#[derive(Clone, Debug, Hash)]
12921326
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
12931327
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1328+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
12941329
pub struct Ipv6MplsVpnUnicastNlri<Octs>(MplsVpnNlri<Octs>);
12951330

12961331
impl<Octs> AfiSafiNlri for Ipv6MplsVpnUnicastNlri<Octs> {
@@ -1366,6 +1401,7 @@ impl<Octs: AsRef<[u8]>> Ord for Ipv6MplsVpnUnicastNlri<Octs> {
13661401
#[derive(Clone, Debug, Hash)]
13671402
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
13681403
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1404+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
13691405
pub struct Ipv6FlowSpecNlri<Octs>(FlowSpecNlri<Octs>);
13701406

13711407
impl<Octs> AfiSafiNlri for Ipv6FlowSpecNlri<Octs> {
@@ -1474,6 +1510,7 @@ impl<Octs> Ipv4MplsUnicastNlri<Octs> {
14741510
#[derive(Copy, Clone, Debug, Hash, PartialEq, Ord, PartialOrd)]
14751511
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
14761512
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1513+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
14771514
pub struct L2VpnVplsNlri(VplsNlri);
14781515

14791516
impl AfiSafiNlri for L2VpnVplsNlri {
@@ -1514,6 +1551,7 @@ impl NlriCompose for L2VpnVplsNlri {
15141551
#[derive(Clone, Debug, Hash)]
15151552
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
15161553
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
1554+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
15171555
pub struct L2VpnEvpnNlri<Octs>(EvpnNlri<Octs>);
15181556

15191557
impl<Octs> AfiSafiNlri for L2VpnEvpnNlri<Octs> {

src/bgp/nlri/common.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
use octseq::{Octets, OctetsBuilder, Parser};
3+
use bincode::{Decode, Encode};
34
use crate::util::parser::ParseError;
45
use inetnum::addr::Prefix;
56
use super::afisafi::Afi;
@@ -12,6 +13,7 @@ use std::fmt;
1213
///
1314
/// Used in all AddpathNlri variants.
1415
#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)]
16+
#[cfg_attr(feature = "bincode", derive(Decode,Encode))]
1517
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
1618
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1719
pub struct PathId(pub u32);

src/bgp/nlri/evpn.rs

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ typeenum!(
2525
#[derive(Copy, Clone, Debug, Hash)]
2626
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
2727
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
2829
pub struct EvpnNlri<Octs> {
2930
#[allow(dead_code)]
3031
route_type: EvpnRouteType,

src/bgp/nlri/flowspec.rs

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use super::afisafi::Afi;
1414
#[derive(Copy, Clone, Debug, Hash)]
1515
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
1616
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
17+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
1718
pub struct FlowSpecNlri<Octs> {
1819
#[allow(dead_code)]
1920
afi: Afi,

src/bgp/nlri/mpls.rs

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use super::afisafi::Afi;
1212
#[derive(Copy, Clone, Debug, Hash)]
1313
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
1414
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
15+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
1516
pub struct MplsNlri<Octs> {
1617
prefix: Prefix,
1718
labels: Labels<Octs>,
@@ -150,6 +151,7 @@ impl<Octs, SrcOcts: Octets> OctetsFrom<MplsNlri<SrcOcts>> for MplsNlri<Octs>
150151
#[derive(Copy, Clone, Debug, Hash)]
151152
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
152153
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
154+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
153155
pub struct Labels<Octs> {
154156
octets: Octs
155157
}

src/bgp/nlri/mpls_vpn.rs

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use super::mpls::Labels;
1717
#[derive(Copy, Clone, Debug, Hash)]
1818
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
1919
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
20+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
2021
pub struct MplsVpnNlri<Octs> {
2122
prefix: Prefix,
2223
labels: Labels<Octs>,
@@ -148,6 +149,7 @@ impl<T> fmt::Display for MplsVpnNlri<T> {
148149
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)]
149150
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
150151
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
152+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
151153
pub struct RouteDistinguisher {
152154
bytes: [u8; 8]
153155
}

src/bgp/nlri/nexthop.rs

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use super::afisafi::AfiSafiType as AfiSafi;
1212
/// Conventional and BGP-MP Next Hop variants.
1313
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1414
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15+
#[cfg_attr(feature = "bincode", derive(bincode::Decode, bincode::Encode))]
1516
pub enum NextHop {
1617
Unicast(IpAddr),
1718
Multicast(IpAddr),

0 commit comments

Comments
 (0)