nmd_core/
assembler.rs

1//! `Assembler` permits to build final `Artifact` of a compiled dossier or document
2
3pub mod assembler_configuration;
4pub mod html_assembler;
5
6
7use std::fmt::Debug;
8use assembler_configuration::AssemblerConfiguration;
9use thiserror::Error;
10use crate::{compilation::compilation_outcome::CompilationOutcome, dossier::{document::chapter::chapter_tag::ChapterTag, dossier_configuration::DossierConfiguration}, resource::ResourceError};
11use super::artifact::ArtifactError;
12
13
14#[derive(Error, Debug)]
15pub enum AssemblerError {
16    #[error("too few elements to assemble: {0}")]
17    TooFewElements(String),
18
19    #[error(transparent)]
20    ArtifactError(#[from] ArtifactError),
21
22    #[error("compiled content not found")]
23    CompiledContentNotFound,
24
25    #[error(transparent)]
26    ResourceError(#[from] ResourceError),
27}
28
29
30pub trait Assembler: Debug + Sync + Send {
31
32    /// Assemble dossier
33    fn assemble_dossier(&self, compiled_documents: &Vec<CompilationOutcome>, compiled_toc: Option<&CompilationOutcome>, compiled_bib: Option<&CompilationOutcome>, dossier_configuration: &DossierConfiguration, configuration: &AssemblerConfiguration) -> Result<String, AssemblerError>;
34
35    /// Assemble document
36    // fn assemble_document(&self, document: &CompilationOutcome) -> Result<String, AssemblerError>;
37
38    /// Assemble a standalone document, so `page_title`, `styles_references`, `toc` and `bibliography` are needed
39    fn assemble_document_standalone(&self, page_title: &str, complied_document: &CompilationOutcome, compiled_toc: Option<&CompilationOutcome>, compiled_bib: Option<&CompilationOutcome>, configuration: &AssemblerConfiguration) -> Result<String, AssemblerError>;
40
41    fn assemble_bundle(&self, compiled_document: &Vec<CompilationOutcome>, compiled_chapters: &Vec<CompilationOutcome>, configuration: &AssemblerConfiguration) -> Result<String, AssemblerError>;
42
43    fn assemble_chapter(&self, chapter_tags: &Vec<ChapterTag>, compiled_heading: &CompilationOutcome, compiled_paragraphs: &Vec<CompilationOutcome>, configuration: &AssemblerConfiguration) -> Result<String, AssemblerError>;
44}
45
46
47#[cfg(test)]
48mod test {
49}