mod csv;
mod docx;
mod html;
mod json;
mod markdown;
mod pdf;
mod sitemap;
mod text;
mod web_scraper;
pub use csv::CSVLoader;
pub use docx::DocxLoader;
pub use html::HTMLLoader;
pub use json::JSONLoader;
pub use markdown::MarkdownLoader;
pub use pdf::PDFLoader;
pub use sitemap::SitemapLoader;
pub use text::TextLoader;
pub use web_scraper::WebScraperLoader;
use async_trait::async_trait;
use lc_vector_stores::Document;
#[derive(Debug, thiserror::Error)]
pub enum LoaderError {
#[error("IO 错误: {0}")]
IoError(#[from] std::io::Error),
#[error("CSV 解析错误: {0}")]
CsvError(String),
#[error("PDF 解析错误: {0}")]
PdfError(String),
#[error("JSON 解析错误: {0}")]
JsonError(String),
#[error("未知错误: {0}")]
Other(String),
}
impl From<pdf_extract::Error> for LoaderError {
fn from(err: pdf_extract::Error) -> Self {
LoaderError::PdfError(err.to_string())
}
}
#[async_trait]
pub trait DocumentLoader: Send + Sync {
async fn load(&self) -> Result<Vec<Document>, LoaderError>;
}