tokio_stream/wrappers/
signal_windows.rs

1use crate::Stream;
2use std::pin::Pin;
3use std::task::{Context, Poll};
4use tokio::signal::windows::{CtrlBreak, CtrlC};
5
6/// A wrapper around [`CtrlC`] that implements [`Stream`].
7///
8/// [`CtrlC`]: struct@tokio::signal::windows::CtrlC
9/// [`Stream`]: trait@crate::Stream
10#[derive(Debug)]
11#[cfg_attr(docsrs, doc(cfg(all(windows, feature = "signal"))))]
12pub struct CtrlCStream {
13    inner: CtrlC,
14}
15
16impl CtrlCStream {
17    /// Create a new `CtrlCStream`.
18    pub fn new(interval: CtrlC) -> Self {
19        Self { inner: interval }
20    }
21
22    /// Get back the inner `CtrlC`.
23    pub fn into_inner(self) -> CtrlC {
24        self.inner
25    }
26}
27
28impl Stream for CtrlCStream {
29    type Item = ();
30
31    fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<()>> {
32        self.inner.poll_recv(cx)
33    }
34}
35
36impl AsRef<CtrlC> for CtrlCStream {
37    fn as_ref(&self) -> &CtrlC {
38        &self.inner
39    }
40}
41
42impl AsMut<CtrlC> for CtrlCStream {
43    fn as_mut(&mut self) -> &mut CtrlC {
44        &mut self.inner
45    }
46}
47
48/// A wrapper around [`CtrlBreak`] that implements [`Stream`].
49///
50/// [`CtrlBreak`]: struct@tokio::signal::windows::CtrlBreak
51/// [`Stream`]: trait@crate::Stream
52#[derive(Debug)]
53#[cfg_attr(docsrs, doc(cfg(all(windows, feature = "signal"))))]
54pub struct CtrlBreakStream {
55    inner: CtrlBreak,
56}
57
58impl CtrlBreakStream {
59    /// Create a new `CtrlBreakStream`.
60    pub fn new(interval: CtrlBreak) -> Self {
61        Self { inner: interval }
62    }
63
64    /// Get back the inner `CtrlBreak`.
65    pub fn into_inner(self) -> CtrlBreak {
66        self.inner
67    }
68}
69
70impl Stream for CtrlBreakStream {
71    type Item = ();
72
73    fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<()>> {
74        self.inner.poll_recv(cx)
75    }
76}
77
78impl AsRef<CtrlBreak> for CtrlBreakStream {
79    fn as_ref(&self) -> &CtrlBreak {
80        &self.inner
81    }
82}
83
84impl AsMut<CtrlBreak> for CtrlBreakStream {
85    fn as_mut(&mut self) -> &mut CtrlBreak {
86        &mut self.inner
87    }
88}