Skip to main content

quillmark_core/
session.rs

1use crate::{Diagnostic, RenderError, RenderOptions, RenderResult};
2
3#[doc(hidden)]
4pub trait SessionHandle: Send + Sync {
5    fn render(&self, opts: &RenderOptions) -> Result<RenderResult, RenderError>;
6    fn page_count(&self) -> usize;
7}
8
9/// Opaque, backend-backed iterative render session.
10pub struct RenderSession {
11    inner: Box<dyn SessionHandle>,
12    warning: Option<Diagnostic>,
13}
14
15impl RenderSession {
16    #[doc(hidden)]
17    pub fn new(inner: Box<dyn SessionHandle>) -> Self {
18        Self {
19            inner,
20            warning: None,
21        }
22    }
23
24    pub(crate) fn with_warning(mut self, warning: Option<Diagnostic>) -> Self {
25        self.warning = warning;
26        self
27    }
28
29    pub fn page_count(&self) -> usize {
30        self.inner.page_count()
31    }
32
33    pub fn render(&self, opts: &RenderOptions) -> Result<RenderResult, RenderError> {
34        let mut result = self.inner.render(opts)?;
35        if let Some(warning) = &self.warning {
36            result.warnings.push(warning.clone_without_source());
37        }
38        Ok(result)
39    }
40}