use std::{ fs::{read_to_string, File}, io::Write, }; use clap::{Parser, Subcommand}; use laby::{html, internal::Buffer, Render}; #[derive(Parser)] struct Args { #[clap(short, long)] output: Option, #[clap(subcommand)] action: ArgAction, } #[derive(Subcommand)] enum ArgAction { RenderArticle { input: String }, } fn main() { let args = Args::parse(); match args.action { ArgAction::RenderArticle { input } => { let md_source = read_to_string(input).unwrap(); let mut out = Buffer::new(); article(md_source).render(&mut out); write_output(&args.output, out.into_string()); } } } fn write_output(t: &Option, o: String) { if let Some(f) = t { let mut f = File::create(f).unwrap(); f.write_fmt(format_args!("{o}")).unwrap() } else { println!("{o}") } } fn scaffold(title: String, body: impl Render) -> impl Render { html!(head!(title!(title)), body!(body)) } fn article(md_source: String) { }