pub(crate) mod blob;
mod parse;
mod table;
mod text;
#[cfg(test)]
pub(crate) const HOSTILE_OBJECT_NAMES: &[&str] = &[
"团体.PDF",
"my report.pdf",
"issue#12.pdf",
"50% off.pdf",
"%E5%9B%A2.pdf",
"what?.pdf",
"[draft] v2.pdf",
"📄 notes 🎉.pdf",
"caf\u{e9}.pdf",
"cafe\u{301}.pdf",
"团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团团xx.pdf",
];
#[cfg(test)]
const _: () = assert!(HOSTILE_OBJECT_NAMES[HOSTILE_OBJECT_NAMES.len() - 1].len() == 255);
use std::collections::HashMap;
use std::sync::Arc;
use anyhow::Result;
use datafusion::prelude::SessionContext;
pub use parse::{ImageMode, OcrMode, ParseOptions, ParsedPage, parse_source, preflight};
pub use table::DocumentsTable;
pub async fn register_documents_tables(
session_ctx: &mut SessionContext,
name: &str,
path: &str,
options: Option<&HashMap<String, String>>,
) -> Result<()> {
tracing::info!("Registering documents source: {} at {}", name, path);
let opts = ParseOptions::from_map(options);
preflight(&opts)?;
session_ctx
.register_table(name, Arc::new(DocumentsTable::new(path.to_string(), opts)))
.map_err(|e| anyhow::anyhow!("Failed to register documents table '{}': {}", name, e))?;
tracing::info!("Successfully registered documents source: {}", name);
Ok(())
}