tokio_stream/wrappers/
signal_windows.rs1use crate::Stream;
2use std::pin::Pin;
3use std::task::{Context, Poll};
4use tokio::signal::windows::{CtrlBreak, CtrlC};
5
6#[derive(Debug)]
11#[cfg_attr(docsrs, doc(cfg(all(windows, feature = "signal"))))]
12pub struct CtrlCStream {
13 inner: CtrlC,
14}
15
16impl CtrlCStream {
17 pub fn new(interval: CtrlC) -> Self {
19 Self { inner: interval }
20 }
21
22 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#[derive(Debug)]
53#[cfg_attr(docsrs, doc(cfg(all(windows, feature = "signal"))))]
54pub struct CtrlBreakStream {
55 inner: CtrlBreak,
56}
57
58impl CtrlBreakStream {
59 pub fn new(interval: CtrlBreak) -> Self {
61 Self { inner: interval }
62 }
63
64 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}