add TryFrom/From implementations (#1347)

* TryFrom<net::TcpListener> for TcpListener
* TryFrom<net::TcpStream> for TcpStream
* TryFrom<net::UdpSocket> for UdpSocket
* TryFrom<net::UnixDatagram> for UnixDatagram
* TryFrom<net::UnixListener> for UnixListener
* TryFrom<net::UnixStream> for UnixStream
* TryFrom<UnixDatagram> for mio_uds::UnixDatagram
* TryFrom<File> for io::File
* From<io::File> for File
This commit is contained in:
Taiki Endo
2019-07-24 09:26:12 -07:00
committed by Carl Lerche
parent 59bc364a0e
commit ca0e5cc670
7 changed files with 102 additions and 0 deletions
+25
View File
@@ -2,6 +2,7 @@ use crate::{Recv, RecvFrom, Send, SendTo};
use futures_core::ready;
use mio::Ready;
use mio_uds;
use std::convert::TryFrom;
use std::fmt;
use std::io;
use std::net::Shutdown;
@@ -312,6 +313,30 @@ impl UnixDatagram {
}
}
impl TryFrom<UnixDatagram> for mio_uds::UnixDatagram {
type Error = io::Error;
/// Consumes value, returning the mio I/O object.
///
/// See [`tokio_reactor::PollEvented::into_inner`] for more details about
/// resource deregistration that happens during the call.
fn try_from(value: UnixDatagram) -> Result<Self, Self::Error> {
value.io.into_inner()
}
}
impl TryFrom<net::UnixDatagram> for UnixDatagram {
type Error = io::Error;
/// Consumes stream, returning the tokio I/O object.
///
/// This is equivalent to
/// [`UnixDatagram::from_std(stream, &Handle::default())`](UnixDatagram::from_std).
fn try_from(stream: net::UnixDatagram) -> Result<Self, Self::Error> {
Self::from_std(stream, &Handle::default())
}
}
impl fmt::Debug for UnixDatagram {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.io.get_ref().fmt(f)
+12
View File
@@ -155,6 +155,18 @@ impl TryFrom<UnixListener> for mio_uds::UnixListener {
}
}
impl TryFrom<net::UnixListener> for UnixListener {
type Error = io::Error;
/// Consumes stream, returning the tokio I/O object.
///
/// This is equivalent to
/// [`UnixListener::from_std(stream, &Handle::default())`](UnixListener::from_std).
fn try_from(stream: net::UnixListener) -> io::Result<Self> {
Self::from_std(stream, &Handle::default())
}
}
impl fmt::Debug for UnixListener {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.io.get_ref().fmt(f)
+12
View File
@@ -130,6 +130,18 @@ impl TryFrom<UnixStream> for mio_uds::UnixStream {
}
}
impl TryFrom<net::UnixStream> for UnixStream {
type Error = io::Error;
/// Consumes stream, returning the tokio I/O object.
///
/// This is equivalent to
/// [`UnixStream::from_std(stream, &Handle::default())`](UnixStream::from_std).
fn try_from(stream: net::UnixStream) -> io::Result<Self> {
Self::from_std(stream, &Handle::default())
}
}
impl AsyncRead for UnixStream {
unsafe fn prepare_uninitialized_buffer(&self, _: &mut [u8]) -> bool {
false