use crate::pipe_out::WriteLineResult;
#[doc = include_str!("examples/pipe_out.rs")]
#[doc = include_str!("examples/example_handles_broken_pipe.rs")]
pub struct PipeOutRecoveredIterator<D: std::fmt::Display, I: Iterator<Item = D>>
{
pub iter: I,
pub recovered_datum: Option<D>,
pub result: WriteLineResult,
}
impl<D: std::fmt::Display, I: Iterator<Item = D>> Iterator
for PipeOutRecoveredIterator<D, I>
{
type Item = D;
fn next(&mut self) -> Option<Self::Item> {
self.recovered_datum.take().or_else(|| self.iter.next())
}
}
impl<D: std::fmt::Display, I: Iterator<Item = D>>
PipeOutRecoveredIterator<D, I>
{
pub fn dump_data(self) -> WriteLineResult {
self.result
}
pub fn is_broken_pipe(&self) -> bool {
matches!(self.result, WriteLineResult::BrokenPipe(_))
}
pub fn has_recovered_datum(&self) -> bool {
self.recovered_datum.is_some()
}
pub fn take_recovered_datum(&mut self) -> Option<D> {
self.recovered_datum.take()
}
}