cortex_runtime/renderer/
mod.rs1pub mod chromium;
7
8use anyhow::Result;
9use async_trait::async_trait;
10use serde::{Deserialize, Serialize};
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct NavigationResult {
15 pub final_url: String,
17 pub status: u16,
19 pub redirect_chain: Vec<String>,
21 pub load_time_ms: u64,
23}
24
25#[async_trait]
27pub trait Renderer: Send + Sync {
28 async fn new_context(&self) -> Result<Box<dyn RenderContext>>;
30 async fn shutdown(&self) -> Result<()>;
32 fn active_contexts(&self) -> usize;
34}
35
36#[async_trait]
38pub trait RenderContext: Send + Sync {
39 async fn navigate(&mut self, url: &str, timeout_ms: u64) -> Result<NavigationResult>;
41 async fn execute_js(&self, script: &str) -> Result<serde_json::Value>;
43 async fn get_html(&self) -> Result<String>;
45 async fn get_url(&self) -> Result<String>;
47 async fn close(self: Box<Self>) -> Result<()>;
49}
50
51pub struct NoopRenderer;
57
58#[async_trait]
59impl Renderer for NoopRenderer {
60 async fn new_context(&self) -> Result<Box<dyn RenderContext>> {
61 Err(anyhow::anyhow!("Browser not available — HTTP-only mode"))
62 }
63 async fn shutdown(&self) -> Result<()> {
64 Ok(())
65 }
66 fn active_contexts(&self) -> usize {
67 0
68 }
69}