diff --git a/runtime/src/pdfium.rs b/runtime/src/pdfium.rs index 7a128dcb..be4d9cf6 100644 --- a/runtime/src/pdfium.rs +++ b/runtime/src/pdfium.rs @@ -1,31 +1,23 @@ use std::error::Error; use std::sync::Mutex; -use once_cell::sync::Lazy; +use once_cell::sync::{Lazy, OnceCell}; use pdfium_render::prelude::Pdfium; use log::{error, info, warn}; pub static PDFIUM_LIB_PATH: Lazy>> = Lazy::new(|| Mutex::new(None)); -static PDFIUM: Lazy>> = Lazy::new(|| Mutex::new(None)); +static PDFIUM: OnceCell = OnceCell::new(); pub trait PdfiumInit { - fn ai_studio_init() -> Result>; + fn ai_studio_init() -> Result<&'static Pdfium, Box>; } impl PdfiumInit for Pdfium { /// Initializes the PDFium library for AI Studio. - fn ai_studio_init() -> Result> { - let mut pdfium = PDFIUM.lock().unwrap(); - if let Some(pdfium) = pdfium.as_ref() { - return Ok(pdfium.clone()); - } - - let loaded_pdfium = load_pdfium().map_err(|error| { + fn ai_studio_init() -> Result<&'static Pdfium, Box> { + PDFIUM.get_or_try_init(|| load_pdfium().map_err(|error| { Box::new(std::io::Error::other(error)) as Box - })?; - *pdfium = Some(loaded_pdfium.clone()); - - Ok(loaded_pdfium) + })) } } @@ -76,4 +68,4 @@ fn load_pdfium() -> Result { Err(error_message) } } -} \ No newline at end of file +}