A pit full of rusty nails
at main 1.9 kB view raw
1use std::{fs::read_to_string, sync::Arc}; 2 3use color_eyre::eyre::Context; 4use glob::glob; 5use nailbox::try_arc_within; 6use nailconfig::NailConfig; 7use nailgen::{GeneratedTemplate, MarkovGen, WarningTemplate}; 8use nailstate::Templates; 9 10/// Takes a glob for finding all input files and returns a read-only list of 11/// all markov chains that can be generated. 12pub fn get_input_files(config: &NailConfig) -> color_eyre::Result<Arc<[MarkovGen]>> { 13 let inputs = glob(&config.generator.input_files)? 14 .filter_map(|path| { 15 path.inspect_err(|err| tracing::error!("IO Error: {err}")) 16 .ok() 17 }) 18 .filter_map(|input| { 19 MarkovGen::new(input) 20 .inspect_err(|err| tracing::error!("Markov Error: {err}")) 21 .ok() 22 }) 23 .collect::<Arc<[MarkovGen]>>(); 24 25 if inputs.is_empty() { 26 color_eyre::eyre::bail!("No input files found! Exiting..."); 27 } 28 29 Ok(inputs) 30} 31 32pub fn get_template_files(config: &NailConfig) -> color_eyre::Result<Arc<Templates>> { 33 let (index, content) = ( 34 read_to_string(&config.generator.warning_template).context("Missing Warning Template")?, 35 read_to_string(&config.generator.warning_message).context("Missing Warning Message")?, 36 ); 37 let generated = read_to_string(&config.generator.generated_template) 38 .context("Missing Generated Template")?; 39 40 let templates = try_arc_within(|| -> color_eyre::Result<Templates> { 41 Ok(Templates { 42 warning: WarningTemplate::init(index.into(), content.into()).context( 43 "Warning Template should only contain title, main and footer placeholders" 44 )?, 45 generated: GeneratedTemplate::init(generated.into()).context("Generated template contains invalid placeholders, should only contain title, initial, main, extra and footer placeholders")?, 46 }) 47 })?; 48 49 Ok(templates) 50}