summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/vrrpv2.rs40
1 files changed, 14 insertions, 26 deletions
diff --git a/src/vrrpv2.rs b/src/vrrpv2.rs
index ee2c5f7..7ef30f3 100644
--- a/src/vrrpv2.rs
+++ b/src/vrrpv2.rs
@@ -35,7 +35,7 @@ pub struct VRRPv2 {
pub ip_addrs: Vec<Ipv4Addr>,
}
-#[derive(Debug, Clone, PartialEq)]
+#[derive(Debug, PartialEq)]
pub enum VRRPv2Error {
InvalidAuthType,
InvalidChecksum,
@@ -56,7 +56,11 @@ impl std::fmt::Display for VRRPv2Error {
}
}
-impl std::error::Error for VRRPv2Error {}
+impl From<std::io::Error> for VRRPv2Error {
+ fn from(_err: std::io::Error) -> VRRPv2Error {
+ VRRPv2Error::ParseError
+ }
+}
#[derive(Debug, PartialEq)]
pub enum VRRPv2AuthType {
@@ -93,44 +97,28 @@ impl<T: AsRef<[u8]>> BytesReader for Cursor<T> {
fn parse(bytes: &[u8]) -> Result<VRRPv2, VRRPv2Error> {
let mut rdr = Cursor::new(bytes);
- let Ok(vertype) = rdr.read_u8() else {
- return Err(VRRPv2Error::ParseError);
- };
+ let vertype = rdr.read_u8()?;
if (vertype & 0xF) != 1 {
return Err(VRRPv2Error::InvalidType);
}
if (vertype >> 4) != 2 {
return Err(VRRPv2Error::InvalidVersion);
}
- let Ok(virtual_router_id) = rdr.read_u8() else {
- return Err(VRRPv2Error::ParseError);
- };
- let Ok(priority) = rdr.read_u8() else {
- return Err(VRRPv2Error::ParseError);
- };
- let Ok(count_ip_addrs) = rdr.read_u8() else {
- return Err(VRRPv2Error::ParseError);
- };
- let Ok(auth_type) = rdr.read_u8() else {
- return Err(VRRPv2Error::ParseError);
- };
+ let virtual_router_id = rdr.read_u8()?;
+ let priority = rdr.read_u8()?;
+ let count_ip_addrs = rdr.read_u8()?;
+ let auth_type = rdr.read_u8()?;
let auth_type = match auth_type {
0 => VRRPv2AuthType::VRRPv2AuthNoAuth,
1 => VRRPv2AuthType::VRRPv2AuthReserved1,
2 => VRRPv2AuthType::VRRPv2AuthReserved2,
_ => return Err(VRRPv2Error::InvalidAuthType),
};
- let Ok(advertisement_interval) = rdr.read_u8() else {
- return Err(VRRPv2Error::ParseError);
- };
- let Ok(checksum) = rdr.read_u16() else {
- return Err(VRRPv2Error::ParseError);
- };
+ let advertisement_interval = rdr.read_u8()?;
+ let checksum = rdr.read_u16()?;
let mut ip_addrs = Vec::with_capacity(count_ip_addrs as usize);
for _i in 0..count_ip_addrs {
- let Ok(b) = rdr.read_u32() else {
- return Err(VRRPv2Error::ParseError);
- };
+ let b = rdr.read_u32()?;
ip_addrs.push(Ipv4Addr::from(b));
}
Ok(VRRPv2 {