diff options
| author | luwenpeng <[email protected]> | 2023-08-18 09:47:16 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2023-08-18 09:47:43 +0800 |
| commit | b4d0d78a8d9e95363552a1d032f8e9eb564862c1 (patch) | |
| tree | 1b556133a56ac043b4323bd002079c813e54e98d | |
| parent | 185629f06799443a0364506d2be9057744796ab8 (diff) | |
[refactor] Redefine decode trait associated types
| -rw-r--r-- | src/protocol/codec.rs | 5 | ||||
| -rw-r--r-- | src/protocol/dns.rs | 3 | ||||
| -rw-r--r-- | src/protocol/ethernet.rs | 3 | ||||
| -rw-r--r-- | src/protocol/http.rs | 3 | ||||
| -rw-r--r-- | src/protocol/ip.rs | 3 | ||||
| -rw-r--r-- | src/protocol/ipv4.rs | 3 | ||||
| -rw-r--r-- | src/protocol/ipv6.rs | 3 | ||||
| -rw-r--r-- | src/protocol/tcp.rs | 3 | ||||
| -rw-r--r-- | src/protocol/udp.rs | 3 |
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)?; |
