quillmark_core/
session.rs1use 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
9pub 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}