mod error;
pub use error::*;
mod r#impl;
use crate::os::windows::{
limbo::tokio::Corpse,
named_pipe::{
stream::{pipe_mode, PipeModeTag},
MaybeArc,
},
NeedsFlush,
};
use std::{io, marker::PhantomData};
use tokio::net::windows::named_pipe::{
NamedPipeClient as TokioNPClient, NamedPipeServer as TokioNPServer,
};
#[doc = doctest_file::include_doctest!("examples/named_pipe/sync/stream/bytes.rs")]
pub struct PipeStream<Rm: PipeModeTag, Sm: PipeModeTag> {
raw: MaybeArc<RawPipeStream>,
flusher: Sm::TokioFlusher,
_phantom: PhantomData<(Rm, Sm)>,
}
pub type DuplexPipeStream<M> = PipeStream<M, M>;
pub type RecvPipeStream<M> = PipeStream<M, pipe_mode::None>;
pub type SendPipeStream<M> = PipeStream<pipe_mode::None, M>;
pub(crate) struct RawPipeStream {
inner: Option<InnerTokio>,
needs_flush: NeedsFlush,
}
enum InnerTokio {
Server(TokioNPServer),
Client(TokioNPClient),
}
impl From<InnerTokio> for Corpse {
fn from(it: InnerTokio) -> Self {
match it {
InnerTokio::Server(o) => Corpse::NpServer(o),
InnerTokio::Client(o) => Corpse::NpClient(o),
}
}
}