diff options
| author | Markus Reiter <me@reitermark.us> | 2019-12-06 13:27:39 +0100 |
|---|---|---|
| committer | Markus Reiter <me@reitermark.us> | 2019-12-06 13:28:02 +0100 |
| commit | 79f876495b2853d1b78ba953ceb3114b8019100f (patch) | |
| tree | 11ed3230cf40416997fb1607a6d4c6179b7771e7 /src/libstd | |
| parent | d0126e8ed3cc0d6fcb9dd44c36a46f9ce65010a0 (diff) | |
Remove boxed closures in address parser.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/net/parser.rs | 23 |
1 files changed, 4 insertions, 19 deletions
diff --git a/src/libstd/net/parser.rs b/src/libstd/net/parser.rs index 8106d1c3315..686fa8c61a1 100644 --- a/src/libstd/net/parser.rs +++ b/src/libstd/net/parser.rs @@ -44,19 +44,6 @@ impl<'a> Parser<'a> { self.read_atomically(move |p| cb(p).filter(|_| p.is_eof())) } - // Return result of first successful parser - fn read_or<T>( - &mut self, - parsers: &mut [Box<dyn FnMut(&mut Parser<'_>) -> Option<T> + 'static>], - ) -> Option<T> { - for pf in parsers { - if let Some(r) = self.read_atomically(|p: &mut Parser<'_>| pf(p)) { - return Some(r); - } - } - None - } - // Apply 3 parsers sequentially fn read_seq_3<A, B, C, PA, PB, PC>(&mut self, pa: PA, pb: PB, pc: PC) -> Option<(A, B, C)> where @@ -235,9 +222,8 @@ impl<'a> Parser<'a> { } fn read_ip_addr(&mut self) -> Option<IpAddr> { - let ipv4_addr = |p: &mut Parser<'_>| p.read_ipv4_addr().map(IpAddr::V4); - let ipv6_addr = |p: &mut Parser<'_>| p.read_ipv6_addr().map(IpAddr::V6); - self.read_or(&mut [Box::new(ipv4_addr), Box::new(ipv6_addr)]) + self.read_ipv4_addr().map(IpAddr::V4) + .or_else(|| self.read_ipv6_addr().map(IpAddr::V6)) } fn read_socket_addr_v4(&mut self) -> Option<SocketAddrV4> { @@ -268,9 +254,8 @@ impl<'a> Parser<'a> { } fn read_socket_addr(&mut self) -> Option<SocketAddr> { - let v4 = |p: &mut Parser<'_>| p.read_socket_addr_v4().map(SocketAddr::V4); - let v6 = |p: &mut Parser<'_>| p.read_socket_addr_v6().map(SocketAddr::V6); - self.read_or(&mut [Box::new(v4), Box::new(v6)]) + self.read_socket_addr_v4().map(SocketAddr::V4) + .or_else(|| self.read_socket_addr_v6().map(SocketAddr::V6)) } } |
