use super::super::*;
pub mod pipe_mode {
use super::*;
mod seal {
use super::*;
pub trait PipeModeTag: Copy + std::fmt::Debug + Eq + Send + Sync + Unpin {
const MODE: Option<PipeMode>;
#[cfg(feature = "tokio")]
type TokioFlusher: std::fmt::Debug + Default;
}
#[cfg(feature = "tokio")]
pub trait NotNone:
PipeModeTag<TokioFlusher = crate::os::windows::tokio_flusher::TokioFlusher>
{
}
#[cfg(not(feature = "tokio"))]
pub trait NotNone: PipeModeTag {}
}
pub(crate) use seal::*;
macro_rules! present_tag {
($(#[$attr:meta])* $tag:ident is $mode:expr ; no_tokio_flusher) => {
tag_enum!($( #[$attr] )* $tag);
impl PipeModeTag for $tag {
const MODE: Option<PipeMode> = $mode;
#[cfg(feature = "tokio")]
type TokioFlusher = ();
}
};
($(#[$attr:meta])* $tag:ident is $mode:expr) => {
tag_enum!($( #[$attr] )* $tag);
impl PipeModeTag for $tag {
const MODE: Option<PipeMode> = $mode;
#[cfg(feature = "tokio")]
type TokioFlusher = crate::os::windows::tokio_flusher::TokioFlusher;
}
};
($($(#[$attr:meta])* $tag:ident is $mode:expr $(; $yayornay:ident)?),+ $(,)?) => {
$(present_tag!($( #[$attr] )* $tag is $mode $(; $yayornay)?);)+
};
}
present_tag! {
None is None ; no_tokio_flusher,
Bytes is Some(PipeMode::Bytes),
Messages is Some(PipeMode::Messages),
}
impl NotNone for Bytes {}
impl NotNone for Messages {}
}
pub(crate) use pipe_mode::{NotNone as PmtNotNone, PipeModeTag};