mod extractor;
mod ocr;
mod processor;
mod renderer;
mod validator;
pub use extractor::DocumentExtractorRegistry;
pub use ocr::OcrBackendRegistry;
pub use processor::PostProcessorRegistry;
pub use renderer::RendererRegistry;
pub use validator::ValidatorRegistry;
use crate::{KreuzbergError, Result};
use once_cell::sync::Lazy;
use parking_lot::RwLock;
use std::sync::Arc;
pub(super) fn validate_plugin_name(name: &str) -> Result<()> {
if name.is_empty() {
return Err(KreuzbergError::Validation {
message: "Plugin name cannot be empty".to_string(),
source: None,
});
}
if name.contains(char::is_whitespace) {
return Err(KreuzbergError::Validation {
message: format!("Plugin name '{}' cannot contain whitespace", name),
source: None,
});
}
Ok(())
}
pub static OCR_BACKEND_REGISTRY: Lazy<Arc<RwLock<OcrBackendRegistry>>> =
Lazy::new(|| Arc::new(RwLock::new(OcrBackendRegistry::new())));
pub static DOCUMENT_EXTRACTOR_REGISTRY: Lazy<Arc<RwLock<DocumentExtractorRegistry>>> =
Lazy::new(|| Arc::new(RwLock::new(DocumentExtractorRegistry::new())));
pub static POST_PROCESSOR_REGISTRY: Lazy<Arc<RwLock<PostProcessorRegistry>>> =
Lazy::new(|| Arc::new(RwLock::new(PostProcessorRegistry::new())));
pub static VALIDATOR_REGISTRY: Lazy<Arc<RwLock<ValidatorRegistry>>> =
Lazy::new(|| Arc::new(RwLock::new(ValidatorRegistry::new())));
pub static RENDERER_REGISTRY: Lazy<Arc<RwLock<RendererRegistry>>> =
Lazy::new(|| Arc::new(RwLock::new(RendererRegistry::new())));
pub fn get_ocr_backend_registry() -> Arc<RwLock<OcrBackendRegistry>> {
OCR_BACKEND_REGISTRY.clone()
}
pub fn get_document_extractor_registry() -> Arc<RwLock<DocumentExtractorRegistry>> {
DOCUMENT_EXTRACTOR_REGISTRY.clone()
}
pub fn get_post_processor_registry() -> Arc<RwLock<PostProcessorRegistry>> {
POST_PROCESSOR_REGISTRY.clone()
}
pub fn get_validator_registry() -> Arc<RwLock<ValidatorRegistry>> {
VALIDATOR_REGISTRY.clone()
}
pub fn get_renderer_registry() -> Arc<RwLock<RendererRegistry>> {
RENDERER_REGISTRY.clone()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_global_registry_access() {
let ocr_registry = get_ocr_backend_registry();
let _ = ocr_registry.read().list();
let extractor_registry = get_document_extractor_registry();
let _ = extractor_registry.read().list();
let processor_registry = get_post_processor_registry();
let _ = processor_registry.read().list();
let validator_registry = get_validator_registry();
let _ = validator_registry.read().list();
let renderer_registry = get_renderer_registry();
let _ = renderer_registry.read().list();
}
}