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 finalize(self: Box<Self>) -> Result<W, Error>;
}
#[cfg(not(feature = "send"))]
pub trait InnerReaderTrait: Read + Seek {}
#[cfg(not(feature = "send"))]
impl<T: Read + Seek> InnerReaderTrait for T {}
#[cfg(feature = "send")]
pub trait InnerReaderTrait: Read + Seek + Send {}
#[cfg(feature = "send")]
impl<T: Read + Seek + Send> InnerReaderTrait for T {}
pub trait LayerReader<'a, R: InnerReaderTrait>: InnerReaderTrait {
#[allow(dead_code)]
fn into_raw(self: Box<Self>) -> R;
fn initialize(&mut self) -> Result<(), Error>;
}
pub trait LayerTruncatedReader<'a, R: Read>: Read {}