use mprobe_diagnostics::error::MetricParseError;
use mprobe_diagnostics::metrics::MetricsChunk;
pub(super) struct ErrorHandlingIter<I> {
iter: I,
}
impl<I> ErrorHandlingIter<I>
where
I: Iterator<Item = Result<MetricsChunk, MetricParseError>>,
{
pub fn new(iter: I) -> ErrorHandlingIter<I> {
Self { iter }
}
}
impl<I> Iterator for ErrorHandlingIter<I>
where
I: Iterator<Item = Result<MetricsChunk, MetricParseError>>,
{
type Item = MetricsChunk;
#[inline]
fn next(&mut self) -> Option<Self::Item> {
loop {
match self.iter.next() {
Some(Ok(item)) => return Some(item),
Some(Err(err)) => {
eprintln!("An error occurred while reading metrics: {err:?}");
continue;
}
None => return None,
}
}
}
}