use crate::configuration::Configuration; use std::fmt::Write; use std::fs; use std::io::{Error, ErrorKind, Result}; use std::path::PathBuf; pub fn status(configuration: &Configuration) -> Result { let mut status_message = String::new(); status_message.push_str("# Configuration\n"); status_message.push_str("\n## Directories\n"); // Main Configuration Locations status_message.push_str(&get_directory_stats( "Configuration", &configuration.config_directory, )?); status_message.push_str(&get_directory_stats("Data", &configuration.data_directory)?); status_message.push_str(&get_directory_stats( "Output", &configuration.output_directory, )?); status_message.push_str("\n## Blog Settings\n"); writeln!( &mut status_message, "Number of posts to keep: {}", configuration.max_posts ) .map_err(|_| Error::new(ErrorKind::Other, "Unable to write status"))?; Ok(status_message) } fn get_directory_stats(label: &str, directory: &PathBuf) -> Result { let mut status_message = String::new(); write!(&mut status_message, "{}: {}. ", label, directory.display()) .map_err(|_| Error::new(ErrorKind::Other, "Unable to write status"))?; if directory.exists() { status_message.push_str("Exists "); if fs::read_dir(directory).is_ok() { status_message.push_str("and is readable.\n"); } else { status_message.push_str("but is not readable.\n"); } } else { status_message.push_str("Does not exist.\n"); } Ok(status_message) }