From ccfca8d8503bdfd8ae54ef7720475d42f0605851 Mon Sep 17 00:00:00 2001 From: Unbewohnte Date: Thu, 19 Aug 2021 15:31:02 +0300 Subject: [PATCH] List fumos flag --- .gitignore | 3 ++- Cargo.lock | 2 +- Cargo.toml | 2 +- src/main.rs | 35 +++++++++++++++++++++++++++-------- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index ed14e66..074194e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /target .cargo/ -releasefiles/ \ No newline at end of file +releasefiles/ +fumosay \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index a73aa26..3552f4a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,7 +45,7 @@ dependencies = [ [[package]] name = "fumosay" -version = "0.3.1" +version = "0.4.0" dependencies = [ "clap", ] diff --git a/Cargo.toml b/Cargo.toml index bd73e65..54292de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fumosay" -version = "0.3.1" +version = "0.4.0" edition = "2018" authors = ["Unbewohnte | Nikolay Kasyanov "] description = "Like cowsay, but with soft friends" diff --git a/src/main.rs b/src/main.rs index d7a68ac..98f672c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,7 @@ const MESSAGE_INDICATOR: &str = "!message"; /// Fumofile name of the default fumo const FUMO_DEFAULT: &str = "fumo.fumo"; /// Default directory where fumofiles are placed -const FUMOFILES_DIR: &str = "/usr/share/fumosay/fumofiles/"; +const DEFAULT_FUMOFILES_DIR: &str = "/usr/share/fumosay/fumofiles/"; /// Returns a resulting string with `MESSAGE_INDICATOR` replaced with given /// `message`. If `MESSAGE_INDICATOR` is not present in fumofile - the @@ -22,7 +22,7 @@ fn process_message(fumofile_contents: &mut String, message: &str) -> String { fn main() { // get command line arguments let matches = App::new("fumosay") - .version("0.3.1") + .version("0.4.0") .author("Unbewohnte | Nikolay Kasyanov ") .about("cowsay, but with soft friends") .arg( @@ -43,7 +43,15 @@ fn main() { .help("look for fumofiles in given directory instead") .takes_value(true) .required(false) - .default_value(FUMOFILES_DIR) + .default_value(DEFAULT_FUMOFILES_DIR) + ) + .arg( + Arg::with_name("list_fumos") + .short("l") + .long("list_fumos") + .help("lists all fumofiles in the default directory instead") + .takes_value(false) + .required(false) ) .arg( Arg::with_name("message") @@ -51,11 +59,22 @@ fn main() { .long("message") .help("set a message to print") .takes_value(true) - .required(true) .index(1) .multiple(true) ).get_matches(); + // check for list_fumos flag. + if matches.is_present("list_fumos") { + // list fumofiles and exit + let fumofiles = fs::read_dir(DEFAULT_FUMOFILES_DIR).expect("Could not read default fumofiles directory"); + for entry in fumofiles { + let file = entry.unwrap(); + let filename = file.file_name(); + print!("{:?}\n", filename); + } + std::process::exit(0); + } + // process fumofiles directory // directory with all fumofiles @@ -69,14 +88,14 @@ fn main() { let mut fumofile_contents: String = fs::read_to_string(fumofile_path).expect("Could not find a fumofile!"); // process the message - let message_values = matches.values_of("message").unwrap(); + let message_values = matches.values_of("message").expect("No message provided"); let message_vec: Vec<&str> = message_values.collect(); let joined_message = message_vec.join(" "); - // parse the file and get the resulting string - let message: String = process_message(&mut fumofile_contents, joined_message.as_str()); + // parse the file, insert fiven message and get the resulting string + let fumosay: String = process_message(&mut fumofile_contents, joined_message.as_str()); - println!("{}", message); + println!("{}", fumosay); }