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 fn with_warning(mut self, warning: Option<Diagnostic>) -> Self {
27 self.warning = warning;
28 self
29 }
30
31 pub fn page_count(&self) -> usize {
32 self.inner.page_count()
33 }
34
35 pub fn render(&self, opts: &RenderOptions) -> Result<RenderResult, RenderError> {
36 let mut result = self.inner.render(opts)?;
37 if let Some(warning) = &self.warning {
38 result.warnings.push(warning.clone());
39 }
40 Ok(result)
41 }
42}