diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2019-12-07 00:10:08 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-07 00:10:08 +0900 |
| commit | 931be6c3bccc38be9052433c321f11da033c57c5 (patch) | |
| tree | 5deec471683d621f91208385425acc4a6b04713c | |
| parent | cc7c45fdc67a7e8439a502ef6de65f3d7db01dd8 (diff) | |
| parent | 79f876495b2853d1b78ba953ceb3114b8019100f (diff) | |
| download | rust-931be6c3bccc38be9052433c321f11da033c57c5.tar.gz rust-931be6c3bccc38be9052433c321f11da033c57c5.zip | |
Rollup merge of #67085 - reitermarkus:addr-parser, r=Mark-Simulacrum
Remove boxed closures in address parser. Simplify address parser by removing unnecessary boxed closures. Also relevant for https://github.com/rust-lang/rfcs/pull/2832.
| -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)) } } |
