use super::ProcessHandle;
use crate::output_stream::OutputStream;
use crate::output_stream::backend::broadcast::BroadcastOutputStream;
use crate::output_stream::backend::single_subscriber::SingleSubscriberOutputStream;
use crate::output_stream::policy::{Delivery, ReplayEnabled};
macro_rules! impl_seal_stdout_replay {
($stdout:ident) => {
impl<StdoutD, Stderr> ProcessHandle<$stdout<StdoutD, ReplayEnabled>, Stderr>
where
StdoutD: Delivery,
Stderr: OutputStream,
{
pub fn seal_stdout_replay(&self) {
self.std_out_stream.seal_replay();
}
}
};
}
macro_rules! impl_seal_stderr_replay {
($stderr:ident) => {
impl<Stdout, StderrD> ProcessHandle<Stdout, $stderr<StderrD, ReplayEnabled>>
where
Stdout: OutputStream,
StderrD: Delivery,
{
pub fn seal_stderr_replay(&self) {
self.std_err_stream.seal_replay();
}
}
};
}
macro_rules! impl_seal_output_replay {
($stdout:ident, $stderr:ident) => {
impl<StdoutD, StderrD>
ProcessHandle<$stdout<StdoutD, ReplayEnabled>, $stderr<StderrD, ReplayEnabled>>
where
StdoutD: Delivery,
StderrD: Delivery,
{
pub fn seal_output_replay(&self) {
self.seal_stdout_replay();
self.seal_stderr_replay();
}
}
};
}
impl_seal_stdout_replay!(BroadcastOutputStream);
impl_seal_stdout_replay!(SingleSubscriberOutputStream);
impl_seal_stderr_replay!(BroadcastOutputStream);
impl_seal_stderr_replay!(SingleSubscriberOutputStream);
impl_seal_output_replay!(BroadcastOutputStream, BroadcastOutputStream);
impl_seal_output_replay!(BroadcastOutputStream, SingleSubscriberOutputStream);
impl_seal_output_replay!(SingleSubscriberOutputStream, BroadcastOutputStream);
impl_seal_output_replay!(SingleSubscriberOutputStream, SingleSubscriberOutputStream);