Files
pile/crates/pile-dataset/src/extract/epub/mod.rs
rm-dr adcf46314f
Some checks failed
CI / Typos (push) Failing after 17s
CI / Build and test (push) Failing after 2m13s
CI / Clippy (push) Failing after 3m33s
CI / Build and test (all features) (push) Failing after 6m8s
Add discovery subcommands list and fields
2026-03-10 21:50:09 -07:00

44 lines
952 B
Rust

use pile_config::Label;
use std::sync::Arc;
mod epub_meta;
pub use epub_meta::*;
mod epub_text;
pub use epub_text::*;
use crate::{Item, PileValue, extract::ObjectExtractor};
pub struct EpubExtractor {
text: Arc<EpubTextExtractor>,
meta: Arc<EpubMetaExtractor>,
}
impl EpubExtractor {
pub fn new(item: &Item) -> Self {
Self {
text: Arc::new(EpubTextExtractor::new(item)),
meta: Arc::new(EpubMetaExtractor::new(item)),
}
}
}
#[async_trait::async_trait]
impl ObjectExtractor for EpubExtractor {
async fn field(&self, name: &pile_config::Label) -> Result<Option<PileValue>, std::io::Error> {
match name.as_str() {
"text" => self.text.field(name).await,
"meta" => Ok(Some(PileValue::ObjectExtractor(self.meta.clone()))),
_ => Ok(None),
}
}
#[expect(clippy::unwrap_used)]
async fn fields(&self) -> Result<Vec<Label>, std::io::Error> {
Ok(vec![
Label::new("text").unwrap(),
Label::new("meta").unwrap(),
])
}
}