use oar_ocr_core::core::OCRError;
use oar_ocr_core::core::config::OrtSessionConfig;
use oar_ocr_core::core::traits::OrtConfigurable;
use oar_ocr_core::core::traits::adapter::AdapterBuilder;
use std::path::{Path, PathBuf};
pub fn resolve_model_path(path: &Path) -> Result<PathBuf, OCRError> {
#[cfg(feature = "auto-download")]
{
oar_ocr_core::core::download::resolve_path(path)
}
#[cfg(not(feature = "auto-download"))]
{
Ok(path.to_path_buf())
}
}
pub fn build_optional_adapter<B>(
model_path: Option<&PathBuf>,
ort_config: Option<&OrtSessionConfig>,
create_builder: impl FnOnce() -> B,
) -> Result<Option<B::Adapter>, OCRError>
where
B: AdapterBuilder + OrtConfigurable,
{
let Some(model) = model_path else {
return Ok(None);
};
let resolved = resolve_model_path(model)?;
let mut builder = create_builder();
if let Some(config) = ort_config {
builder = builder.with_ort_config(config.clone());
}
Ok(Some(builder.build(&resolved)?))
}