1mod csv;
8mod docx;
9mod html;
10mod json;
11mod markdown;
12mod pdf;
13mod sitemap;
14mod text;
15mod web_scraper;
16
17pub use csv::CSVLoader;
18pub use docx::DocxLoader;
19pub use html::HTMLLoader;
20pub use json::JSONLoader;
21pub use markdown::MarkdownLoader;
22pub use pdf::PDFLoader;
23pub use sitemap::SitemapLoader;
24pub use text::TextLoader;
25pub use web_scraper::WebScraperLoader;
26
27use async_trait::async_trait;
28use lc_vector_stores::Document;
29
30#[derive(Debug, thiserror::Error)]
32pub enum LoaderError {
33 #[error("IO 错误: {0}")]
35 IoError(#[from] std::io::Error),
36
37 #[error("CSV 解析错误: {0}")]
39 CsvError(String),
40
41 #[error("PDF 解析错误: {0}")]
43 PdfError(String),
44
45 #[error("JSON 解析错误: {0}")]
47 JsonError(String),
48
49 #[error("未知错误: {0}")]
51 Other(String),
52}
53
54impl From<pdf_extract::Error> for LoaderError {
55 fn from(err: pdf_extract::Error) -> Self {
56 LoaderError::PdfError(err.to_string())
57 }
58}
59
60#[async_trait]
64pub trait DocumentLoader: Send + Sync {
65 async fn load(&self) -> Result<Vec<Document>, LoaderError>;
70}