pub(super) mod archive;
pub mod element;
pub mod epub;
pub mod errors;
pub mod manifest;
pub mod metadata;
pub mod resource;
pub mod spine;
pub mod toc;
use crate::ebook::archive::errors::ArchiveResult;
use crate::ebook::errors::EbookResult;
use crate::ebook::manifest::Manifest;
use crate::ebook::metadata::Metadata;
use crate::ebook::resource::Resource;
use crate::ebook::spine::Spine;
use crate::ebook::toc::Toc;
use crate::reader::Reader;
use crate::util::Sealed;
use std::io::Write;
pub trait Ebook: Sealed {
fn reader(&self) -> impl Reader<'_>;
fn metadata(&self) -> impl Metadata<'_>;
fn manifest(&self) -> impl Manifest<'_>;
fn spine(&self) -> impl Spine<'_>;
fn toc(&self) -> impl Toc<'_>;
fn copy_resource<'a>(
&self,
resource: impl Into<Resource<'a>>,
writer: &mut impl Write,
) -> ArchiveResult<u64>;
fn read_resource_str<'a>(&self, resource: impl Into<Resource<'a>>) -> ArchiveResult<String> {
let resource = resource.into();
archive::into_utf8_string(&resource, self.read_resource_bytes(&resource)?)
}
fn read_resource_bytes<'a>(&self, resource: impl Into<Resource<'a>>) -> ArchiveResult<Vec<u8>> {
let mut vec = Vec::new();
self.copy_resource(resource, &mut vec)?;
Ok(vec)
}
}