Skip to main content

decant_render/
lib.rs

1//! `decant-render` — headless-Chrome SPA rendering (feature-gated).
2//!
3//! When compiled **without** the `render` feature this crate is an empty stub —
4//! it exports a `RenderError` type and a placeholder `not_available()` function
5//! so that the main `decant` crate can reference it unconditionally and gate at runtime.
6//!
7//! Enable the `render` Cargo feature to pull in `chromiumoxide` and the real impl:
8//! ```sh
9//! cargo build --features render
10//! ```
11
12pub mod error;
13
14#[cfg(feature = "render")]
15pub mod backend;
16#[cfg(feature = "render")]
17pub mod browser;
18#[cfg(feature = "render")]
19pub mod page;
20#[cfg(feature = "render")]
21pub mod runtime;
22#[cfg(feature = "render")]
23pub mod screenshot;
24
25pub use error::RenderError;
26
27#[cfg(feature = "render")]
28pub use backend::BrowserBackend;
29#[cfg(feature = "render")]
30pub use browser::Browser;
31#[cfg(feature = "render")]
32pub use page::{render_html, render_page};
33#[cfg(feature = "render")]
34pub use runtime::{ObservedResource, ObservedResourceKind, RenderedPage};
35#[cfg(feature = "render")]
36pub use screenshot::{DESKTOP, MOBILE, Screenshot, TABLET, Viewport, capture_viewports};
37
38/// Returns `Err` with a helpful message when the crate was not compiled with `--features render`.
39///
40/// # Errors
41///
42/// Returns `RenderError::FeatureNotEnabled`.
43#[cfg(not(feature = "render"))]
44pub fn not_available() -> Result<(), RenderError> {
45    Err(RenderError::FeatureNotEnabled)
46}
47
48#[cfg(not(feature = "render"))]
49/// Stub module for browser backends.
50pub mod backend {
51    /// Stub type for BrowserBackend when render feature is disabled.
52    #[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
53    pub enum BrowserBackend {
54        /// Chrome
55        Chrome,
56        /// Lightpanda,
57        Lightpanda,
58    }
59}
60
61#[cfg(not(feature = "render"))]
62/// Stub module for browser instance.
63pub mod browser {
64    /// Stub type for Browser when render feature is disabled.
65    pub struct Browser;
66}
67
68#[cfg(not(feature = "render"))]
69/// Stub module for viewport screenshots.
70pub mod screenshot {
71    /// Stub type for Viewport when render feature is disabled.
72    #[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
73    pub struct Viewport {
74        /// Name
75        pub name: &'static str,
76        /// Width
77        pub width: u32,
78        /// Height
79        pub height: u32,
80    }
81    /// MOBILE preset stub
82    pub const MOBILE: Viewport = Viewport {
83        name: "mobile",
84        width: 390,
85        height: 844,
86    };
87    /// TABLET preset stub
88    pub const TABLET: Viewport = Viewport {
89        name: "tablet",
90        width: 768,
91        height: 1024,
92    };
93    /// DESKTOP preset stub
94    pub const DESKTOP: Viewport = Viewport {
95        name: "desktop",
96        width: 1440,
97        height: 900,
98    };
99}
100
101#[cfg(not(feature = "render"))]
102pub use backend::BrowserBackend;
103#[cfg(not(feature = "render"))]
104pub use browser::Browser;
105#[cfg(not(feature = "render"))]
106pub use screenshot::{DESKTOP, MOBILE, TABLET, Viewport};