diff options
Diffstat (limited to 'cli/ops/net.rs')
-rw-r--r-- | cli/ops/net.rs | 45 |
1 files changed, 17 insertions, 28 deletions
diff --git a/cli/ops/net.rs b/cli/ops/net.rs index 01fb65b1f..bf1e56dc9 100644 --- a/cli/ops/net.rs +++ b/cli/ops/net.rs @@ -8,7 +8,6 @@ use crate::state::ThreadSafeState; use deno::Resource; use deno::*; use futures::future::FutureExt; -use futures::future::TryFutureExt; use std; use std::convert::From; use std::future::Future; @@ -39,18 +38,18 @@ pub fn accept(state: &ThreadSafeState, rid: ResourceId) -> Accept { Accept { accept_state: AcceptState::Pending, rid, - state: state.clone(), + state, } } /// A future representing state of accepting a TCP connection. -pub struct Accept { +pub struct Accept<'a> { accept_state: AcceptState, rid: ResourceId, - state: ThreadSafeState, + state: &'a ThreadSafeState, } -impl Future for Accept { +impl Future for Accept<'_> { type Output = Result<(TcpStream, SocketAddr), ErrBox>; fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output> { @@ -109,29 +108,19 @@ fn op_accept( .get::<TcpListenerResource>(rid) .ok_or_else(bad_resource)?; - let op = accept(state, rid) - .and_then(move |(tcp_stream, _socket_addr)| { - let local_addr = match tcp_stream.local_addr() { - Ok(v) => v, - Err(e) => return futures::future::err(ErrBox::from(e)), - }; - let remote_addr = match tcp_stream.peer_addr() { - Ok(v) => v, - Err(e) => return futures::future::err(ErrBox::from(e)), - }; - let mut table = state_.lock_resource_table(); - let rid = - table.add("tcpStream", Box::new(StreamResource::TcpStream(tcp_stream))); - futures::future::ok((rid, local_addr, remote_addr)) - }) - .map_err(ErrBox::from) - .and_then(move |(rid, local_addr, remote_addr)| { - futures::future::ok(json!({ - "rid": rid, - "localAddr": local_addr.to_string(), - "remoteAddr": remote_addr.to_string(), - })) - }); + let op = async move { + let (tcp_stream, _socket_addr) = accept(&state_, rid).await?; + let local_addr = tcp_stream.local_addr()?; + let remote_addr = tcp_stream.peer_addr()?; + let mut table = state_.lock_resource_table(); + let rid = + table.add("tcpStream", Box::new(StreamResource::TcpStream(tcp_stream))); + Ok(json!({ + "rid": rid, + "localAddr": local_addr.to_string(), + "remoteAddr": remote_addr.to_string(), + })) + }; Ok(JsonOp::Async(op.boxed())) } |