use std::{fmt, io};
use crate::{Entry, ValidationError};
#[derive(Debug)]
pub enum IoStreamError {
Validation(ValidationError),
Io(io::Error),
}
impl fmt::Display for IoStreamError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Validation(err) => fmt::Display::fmt(err, f),
Self::Io(err) => fmt::Display::fmt(err, f),
}
}
}
impl std::error::Error for IoStreamError {}
impl From<io::Error> for IoStreamError {
fn from(value: io::Error) -> Self {
Self::Io(value)
}
}
impl From<ValidationError> for IoStreamError {
fn from(value: ValidationError) -> Self {
Self::Validation(value)
}
}
pub trait EntryIoStream {
fn next(&mut self, entry: &impl Entry) -> Result<(), IoStreamError>;
fn flush(&mut self) -> io::Result<()>;
}