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)]
31#[cfg_attr(docsrs, doc(cfg(all(unix, feature = "net"))))]
32pub struct UnixListenerStream {
33 inner: UnixListener,
34}
35
36impl UnixListenerStream {
37 pub fn new(listener: UnixListener) -> Self {
39 Self { inner: listener }
40 }
41
42 pub fn into_inner(self) -> UnixListener {
44 self.inner
45 }
46}
47
48impl Stream for UnixListenerStream {
49 type Item = io::Result<UnixStream>;
50
51 fn poll_next(
52 self: Pin<&mut Self>,
53 cx: &mut Context<'_>,
54 ) -> Poll<Option<io::Result<UnixStream>>> {
55 match self.inner.poll_accept(cx) {
56 Poll::Ready(Ok((stream, _))) => Poll::Ready(Some(Ok(stream))),
57 Poll::Ready(Err(err)) => Poll::Ready(Some(Err(err))),
58 Poll::Pending => Poll::Pending,
59 }
60 }
61}
62
63impl AsRef<UnixListener> for UnixListenerStream {
64 fn as_ref(&self) -> &UnixListener {
65 &self.inner
66 }
67}
68
69impl AsMut<UnixListener> for UnixListenerStream {
70 fn as_mut(&mut self) -> &mut UnixListener {
71 &mut self.inner
72 }
73}