1pub 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 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 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}