mod html; mod rss; mod static_files; mod txt; use crate::post::Post; use crate::template::Context; use std::io::Result; use std::path::Path; type Generator = fn(&Path, &Path, &Path, &Context) -> Result<()>; pub fn generate( static_directory: &Path, template_directory: &Path, output_directory: &Path, posts: &[Post], ) -> Result<()> { let generators = available_generators(); let context = Post::to_template_context(posts); for generator in generators { generator( static_directory, template_directory, output_directory, &context, )?; } Ok(()) } fn available_generators() -> Vec { vec![ static_files::generate, // These three are actually the same. Can generalize, don't know how in rust yet. html::generate, rss::generate, txt::generate, ] }