summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2023-08-18 09:47:16 +0800
committerluwenpeng <[email protected]>2023-08-18 09:47:43 +0800
commitb4d0d78a8d9e95363552a1d032f8e9eb564862c1 (patch)
tree1b556133a56ac043b4323bd002079c813e54e98d /src
parent185629f06799443a0364506d2be9057744796ab8 (diff)
[refactor] Redefine decode trait associated types
Diffstat (limited to 'src')
-rw-r--r--src/protocol/codec.rs5
-rw-r--r--src/protocol/dns.rs3
-rw-r--r--src/protocol/ethernet.rs3
-rw-r--r--src/protocol/http.rs3
-rw-r--r--src/protocol/ip.rs3
-rw-r--r--src/protocol/ipv4.rs3
-rw-r--r--src/protocol/ipv6.rs3
-rw-r--r--src/protocol/tcp.rs3
-rw-r--r--src/protocol/udp.rs3
9 files changed, 19 insertions, 10 deletions
diff --git a/src/protocol/codec.rs b/src/protocol/codec.rs
index ce3d0a4..7bf2243 100644
--- a/src/protocol/codec.rs
+++ b/src/protocol/codec.rs
@@ -1,8 +1,9 @@
use nom::IResult;
use std::fmt::Debug;
-pub trait Decode<T: Debug> {
- fn decode(input: &[u8]) -> IResult<&[u8], T>;
+pub trait Decode {
+ type Iterm: Debug;
+ fn decode(input: &[u8]) -> IResult<&[u8], Self::Iterm>;
}
pub trait Encode<T: Debug> {
diff --git a/src/protocol/dns.rs b/src/protocol/dns.rs
index 6612320..135bd11 100644
--- a/src/protocol/dns.rs
+++ b/src/protocol/dns.rs
@@ -1369,7 +1369,8 @@ impl DNS_MESSAGE {
}
}
-impl Decode<DNS_MESSAGE> for DNS_MESSAGE {
+impl Decode for DNS_MESSAGE {
+ type Iterm = DNS_MESSAGE;
fn decode(input: &[u8]) -> IResult<&[u8], DNS_MESSAGE> {
let (mut input, header) = DNS_HEADER::decode(input)?;
let mut message = DNS_MESSAGE::new(header);
diff --git a/src/protocol/ethernet.rs b/src/protocol/ethernet.rs
index b2888cc..4cfc9da 100644
--- a/src/protocol/ethernet.rs
+++ b/src/protocol/ethernet.rs
@@ -141,7 +141,8 @@ impl MacAddress {
}
}
-impl Decode<EthernetFrame> for EthernetFrame {
+impl Decode for EthernetFrame {
+ type Iterm = EthernetFrame;
fn decode(input: &[u8]) -> IResult<&[u8], EthernetFrame> {
let (input, dest_mac) = MacAddress::decode(input)?;
let (input, source_mac) = MacAddress::decode(input)?;
diff --git a/src/protocol/http.rs b/src/protocol/http.rs
index b7abccc..289b915 100644
--- a/src/protocol/http.rs
+++ b/src/protocol/http.rs
@@ -15,7 +15,8 @@ impl HTTP_MESSAGE {
}
}
-impl Decode<HTTP_MESSAGE> for HTTP_MESSAGE {
+impl Decode for HTTP_MESSAGE {
+ type Iterm = HTTP_MESSAGE;
fn decode(input: &[u8]) -> IResult<&[u8], HTTP_MESSAGE> {
let message = HTTP_MESSAGE::new();
// TODO
diff --git a/src/protocol/ip.rs b/src/protocol/ip.rs
index 1b92494..d7a1fe9 100644
--- a/src/protocol/ip.rs
+++ b/src/protocol/ip.rs
@@ -63,7 +63,8 @@ impl From<u8> for IPProtocol {
}
}
-impl Decode<IPProtocol> for IPProtocol {
+impl Decode for IPProtocol {
+ type Iterm = IPProtocol;
fn decode(input: &[u8]) -> IResult<&[u8], IPProtocol> {
let (input, protocol) = number::streaming::be_u8(input)?;
diff --git a/src/protocol/ipv4.rs b/src/protocol/ipv4.rs
index 60ec01a..f0ee008 100644
--- a/src/protocol/ipv4.rs
+++ b/src/protocol/ipv4.rs
@@ -71,7 +71,8 @@ fn address_v4_decode(input: &[u8]) -> IResult<&[u8], Ipv4Addr> {
Ok((input, Ipv4Addr::from(<[u8; 4]>::try_from(ipv4).unwrap())))
}
-impl Decode<IPv4Header> for IPv4Header {
+impl Decode for IPv4Header {
+ type Iterm = IPv4Header;
fn decode(input: &[u8]) -> IResult<&[u8], IPv4Header> {
let (input, verihl) = version_hlen_decode(input)?;
let (input, tos) = number::streaming::be_u8(input)?;
diff --git a/src/protocol/ipv6.rs b/src/protocol/ipv6.rs
index c334ea2..f8bafdd 100644
--- a/src/protocol/ipv6.rs
+++ b/src/protocol/ipv6.rs
@@ -71,7 +71,8 @@ fn address_v6_decode(input: &[u8]) -> IResult<&[u8], Ipv6Addr> {
Ok((input, Ipv6Addr::from(<[u8; 16]>::try_from(ipv6).unwrap())))
}
-impl Decode<IPv6Header> for IPv6Header {
+impl Decode for IPv6Header {
+ type Iterm = IPv6Header;
fn decode(input: &[u8]) -> IResult<&[u8], IPv6Header> {
let (input, ver_tc) = half_byte_decode(input)?;
let (input, tc_fl) = half_byte_decode(input)?;
diff --git a/src/protocol/tcp.rs b/src/protocol/tcp.rs
index aaedada..a34fc37 100644
--- a/src/protocol/tcp.rs
+++ b/src/protocol/tcp.rs
@@ -229,7 +229,8 @@ impl TcpHeader {
}
}
-impl Decode<TcpHeader> for TcpHeader {
+impl Decode for TcpHeader {
+ type Iterm = TcpHeader;
fn decode(input: &[u8]) -> IResult<&[u8], TcpHeader> {
match TcpHeader::fixed_header_decode(input) {
Ok((left, mut header)) => {
diff --git a/src/protocol/udp.rs b/src/protocol/udp.rs
index d5302eb..0eba88f 100644
--- a/src/protocol/udp.rs
+++ b/src/protocol/udp.rs
@@ -32,7 +32,8 @@ pub struct UdpHeader {
* API
******************************************************************************/
-impl Decode<UdpHeader> for UdpHeader {
+impl Decode for UdpHeader {
+ type Iterm = UdpHeader;
fn decode(input: &[u8]) -> IResult<&[u8], UdpHeader> {
let (input, source_port) = number::streaming::be_u16(input)?;
let (input, dest_port) = number::streaming::be_u16(input)?;