kroki_rs/browser/
manager.rs1use crate::browser::backend::BrowserBackend;
2#[cfg(feature = "native-browser")]
3use crate::browser::native::NativeBackend;
4use crate::diagrams::DiagramResult;
5use anyhow::{anyhow, Result};
6use std::sync::Arc;
7
8#[derive(Clone)]
11pub struct BrowserManager {
12 backend: Arc<dyn BrowserBackend>,
13}
14
15impl BrowserManager {
16 pub async fn start(pool_size: usize, context_ttl: usize) -> Result<Self> {
19 #[cfg(feature = "native-browser")]
20 {
21 match NativeBackend::new(pool_size, context_ttl).await {
22 Ok(backend) => {
23 tracing::info!("Initialized native browser backend (headless_chrome)");
24 Ok(Self {
25 backend: Arc::new(backend),
26 })
27 }
28 Err(e) => Err(anyhow!("Native browser backend failed to start: {}", e)),
29 }
30 }
31
32 #[cfg(not(feature = "native-browser"))]
33 {
34 let _ = (pool_size, context_ttl);
35 Err(anyhow!("Browser-based rendering is disabled in this build. Rebuild with --features native-browser."))
36 }
37 }
38
39 pub async fn evaluate(
41 &self,
42 diagram_type: &str,
43 source: &str,
44 format: &str,
45 ) -> DiagramResult<Vec<u8>> {
46 self.backend.render(diagram_type, source, format).await
47 }
48
49 pub async fn get_pool_health(&self) -> Result<serde_json::Value> {
51 Ok(self.backend.health().await)
52 }
53}