use epub_builder::EpubBuilder;
use epub_builder::EpubContent;
use epub_builder::ReferenceType;
use epub_builder::Result;
use epub_builder::TocElement;
use epub_builder::ZipLibrary;
use std::env;
use std::fs::File;
use std::io;
use std::io::Write;
fn run() -> Result<()> {
env_logger::init();
let dummy_content = r#"<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
<body>
<p>Text of the page<T></p>
</body>
</html>"#;
let dummy_image = "Not really a PNG image";
let dummy_css = "body { background-color: pink }";
let _curr_dir = env::current_dir().unwrap();
let _out_file = _curr_dir.join("temp_epub_file.epub");
log::debug!("file to write = {}", &_out_file.display());
let _writer = File::create(_out_file).unwrap();
let mut builder = EpubBuilder::new(ZipLibrary::new()?)?;
builder.add_author("Joan Doe");
builder.set_title("Dummy Book <T>");
builder.stylesheet(dummy_css.as_bytes())?;
builder.add_cover_image("cover.png", dummy_image.as_bytes(), "image/png")?;
builder.add_resource("some_image.png", dummy_image.as_bytes(), "image/png")?;
builder.add_content(
EpubContent::new("cover.xhtml", dummy_content.as_bytes())
.title("Cover")
.reftype(ReferenceType::Cover),
)?;
builder.add_content(
EpubContent::new("title.xhtml", dummy_content.as_bytes())
.title("Title <T>")
.reftype(ReferenceType::TitlePage),
)?;
builder.add_content(
EpubContent::new("chapter_1.xhtml", dummy_content.as_bytes())
.title("Chapter 1 <T>")
.reftype(ReferenceType::Text),
)?;
builder.add_content(
EpubContent::new("chapter_2.xhtml", dummy_content.as_bytes())
.title("Chapter 2 <T>")
.child(TocElement::new("chapter_2.xhtml#1", "Chapter 2, section 1")),
)?;
builder.add_content(
EpubContent::new("section.xhtml", dummy_content.as_bytes())
.title("Chapter 2 <T>, section 2")
.level(2),
)?;
builder.add_content(EpubContent::new("notes.xhtml", dummy_content.as_bytes()))?;
builder.inline_toc();
builder.generate(&mut io::stdout())?;
log::debug!("dummy book generation is done");
Ok(())
}
fn main() {
match run() {
Ok(_) => writeln!(
&mut io::stderr(),
"Successfully wrote epub document to stdout!"
)
.unwrap(),
Err(err) => writeln!(&mut io::stderr(), "Error: {}", err).unwrap(),
};
}