microcad_docgen/md/
mod.rs1mod markdown;
7mod section;
8mod to_md;
9
10pub use markdown::Markdown;
11pub use section::Section;
12pub use to_md::ToMd;
13
14use crate::DocGen;
15use microcad_builtin::Symbol;
16use microcad_lang::symbol::SymbolDef;
17
18pub struct Md {
20 pub output_path: Option<std::path::PathBuf>,
21}
22
23impl Md {
24 pub fn symbol_md_file_path(&self, symbol: &Symbol) -> std::path::PathBuf {
26 let mut path: std::path::PathBuf =
27 symbol.full_name().iter().map(|id| id.to_string()).collect();
28 path.set_extension("md");
29 self.output_path.clone().unwrap_or_default().join(path)
30 }
31
32 pub fn write_md_file(&self, symbol: &Symbol) -> std::io::Result<()> {
33 symbol.to_md().write(self.symbol_md_file_path(symbol))
34 }
35}
36
37impl DocGen for Md {
38 fn doc_gen(&self, symbol: &Symbol) -> std::io::Result<()> {
39 symbol
40 .riter()
41 .filter(|symbol| symbol.with_def(|def| matches!(def, SymbolDef::SourceFile(_))))
42 .try_for_each(|symbol| self.write_md_file(&symbol))
43 }
44}