use std::sync::LazyLock;
use crate::Result;
#[cfg(feature = "url-ingestion")]
use crate::core::config::UrlExtractionConfig;
use crate::core::config::{ExtractInput, ExtractionConfig, ExtractionResult};
#[cfg(feature = "url-ingestion")]
use crawlberg::{CrawlEngine, MapResult};
static DEFAULT_ENGINE: LazyLock<crate::engine::Engine> = LazyLock::new(crate::engine::Engine::new_default);
pub async fn extract(input: ExtractInput, config: &ExtractionConfig) -> Result<ExtractionResult> {
DEFAULT_ENGINE.extract(input, config).await
}
pub async fn extract_batch(inputs: Vec<ExtractInput>, config: &ExtractionConfig) -> Result<ExtractionResult> {
DEFAULT_ENGINE.extract_batch(inputs, config).await
}
#[cfg(feature = "url-ingestion")]
pub async fn map_url(uri: &str, config: &UrlExtractionConfig) -> Result<MapResult> {
config.crawl.validate().map_err(map_crawl_err)?;
let engine = CrawlEngine::builder()
.config(config.crawl.clone())
.build()
.map_err(map_crawl_err)?;
engine.map(uri).await.map_err(map_crawl_err)
}
#[cfg(feature = "url-ingestion")]
fn map_crawl_err(error: crawlberg::CrawlError) -> crate::XbergError {
crate::XbergError::validation(format!("crawlberg URL extraction failed: {error}"))
}