use crate::Error;
use std::io::{Read, Seek, Write};
#[cfg(not(feature = "send"))]
pub type InnerWriterType<'a, W> = Box<dyn 'a + LayerWriter<'a, W>>;
#[cfg(feature = "send")]
pub type InnerWriterType<'a, W> = Box<dyn 'a + LayerWriter<'a, W> + Send>;
#[cfg(not(feature = "send"))]
pub trait InnerWriterTrait: Write {}
#[cfg(not(feature = "send"))]
impl<T: Write> InnerWriterTrait for T {}
#[cfg(feature = "send")]
pub trait InnerWriterTrait: Write + Send {}
#[cfg(feature = "send")]
impl<T: Write + Send> InnerWriterTrait for T {}
pub trait LayerWriter<'a, W: InnerWriterTrait>: Write {
fn into_inner(self) -> Option<InnerWriterType<'a, W>>;
fn into_raw(self: Box<Self>) -> W;
fn finalize(&mut self) -> Result<(), Error>;
}
pub trait LayerReader<'a, R: Read + Seek>: Read + Seek {
fn into_inner(self) -> Option<Box<dyn 'a + LayerReader<'a, R>>>;
fn into_raw(self: Box<Self>) -> R;
fn initialize(&mut self) -> Result<(), Error>;
}
pub trait LayerFailSafeReader<'a, R: Read>: Read {
fn into_inner(self) -> Option<Box<dyn 'a + LayerFailSafeReader<'a, R>>>;
fn into_raw(self: Box<Self>) -> R;
}