tokio_stream/wrappers/
unix_listener.rs1use crate::Stream;
2use std::io;
3use std::pin::Pin;
4use std::task::{Context, Poll};
5use tokio::net::{UnixListener, UnixStream};
6
7#[derive(Debug)]
12#[cfg_attr(docsrs, doc(cfg(all(unix, feature = "net"))))]
13pub struct UnixListenerStream {
14 inner: UnixListener,
15}
16
17impl UnixListenerStream {
18 pub fn new(listener: UnixListener) -> Self {
20 Self { inner: listener }
21 }
22
23 pub fn into_inner(self) -> UnixListener {
25 self.inner
26 }
27}
28
29impl Stream for UnixListenerStream {
30 type Item = io::Result<UnixStream>;
31
32 fn poll_next(
33 self: Pin<&mut Self>,
34 cx: &mut Context<'_>,
35 ) -> Poll<Option<io::Result<UnixStream>>> {
36 match self.inner.poll_accept(cx) {
37 Poll::Ready(Ok((stream, _))) => Poll::Ready(Some(Ok(stream))),
38 Poll::Ready(Err(err)) => Poll::Ready(Some(Err(err))),
39 Poll::Pending => Poll::Pending,
40 }
41 }
42}
43
44impl AsRef<UnixListener> for UnixListenerStream {
45 fn as_ref(&self) -> &UnixListener {
46 &self.inner
47 }
48}
49
50impl AsMut<UnixListener> for UnixListenerStream {
51 fn as_mut(&mut self) -> &mut UnixListener {
52 &mut self.inner
53 }
54}