Skip to content

Commit

Permalink
extracted arg parser logic
Browse files Browse the repository at this point in the history
  • Loading branch information
famedaxolotl committed Jun 28, 2024
1 parent 371d295 commit f6c0b2e
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 56 deletions.
57 changes: 57 additions & 0 deletions src/arg_parser.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
use clap::{command, Arg};

pub fn arg_parser() -> (String, Vec<String>, Vec<String>, Vec<String>){

let matches = command!()
.about("Wget CLI tool to retrieve papers from papers.gceguide.com")
.arg(
Arg::new("subject_code")
.help("Accepts ONE subject code, accepts IGCSE, AS/A Levels and O Levels")
.required(true)
)
.arg(
Arg::new("paper-types")
.help("Comma separated list of paper types (e.g. --paper-types ms,qp,in")
.short('t')
.value_delimiter(',')
)
.arg(
Arg::new("paper-codes")
.help("Comma separated list of paper codes, incuding the variant (e.g. --paper-codes 11,21,31")
.short('c')
.value_delimiter(',')
)
.arg(
Arg::new("years")
.help("Comma seperated list of paper years; must specifiy at least one.")
.value_delimiter(',')
.required(true)
).get_matches();

let sub_code = matches.get_one::<String>("subject_code").unwrap().clone();

let mut codes_vec: Vec<String> = Vec::new();
let mut years_vec: Vec<String> = Vec::new();

let mut types_vec: Vec<String> = Vec::new();

if let Some(values) = matches.get_many::<String>("paper-types") {
for value in values {
types_vec.push(value.clone());
}
}

if let Some(values) = matches.get_many::<String>("paper-codes") {
for value in values {
codes_vec.push(value.clone());
}
}

if let Some(values) = matches.get_many::<String>("years") {
for value in values {
years_vec.push(value.clone());
}
}

(sub_code, types_vec, codes_vec, years_vec)
}
63 changes: 7 additions & 56 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,59 +1,10 @@
use clap::{command, Arg};
pub mod arg_parser;
use arg_parser::arg_parser;

fn main() {
let matches = command!()
.about("Wget CLI tool to retrieve papers from papers.gceguide.com")
.arg(
Arg::new("subject_code")
.help("Accepts ONE subject code, accepts IGCSE, AS/A Levels and O Levels")
.required(true)
)
.arg(
Arg::new("paper-types")
.help("Comma separated list of paper types (e.g. --paper-types ms,qp,in")
.short('t')
.value_delimiter(',')
)
.arg(
Arg::new("paper-codes")
.help("Comma separated list of paper codes, incuding the variant (e.g. --paper-codes 11,21,31")
.short('c')
.value_delimiter(',')
)
.arg(
Arg::new("years")
.help("Comma seperated list of paper years; must specifiy at least one.")
.value_delimiter(',')
.required(true)
).get_matches();

let sub_code = matches.get_one::<String>("subject_code").unwrap().clone();

let mut codes_vec: Vec<String> = Vec::new();
let mut years_vec: Vec<String> = Vec::new();

let mut types_vec: Vec<String> = Vec::new();

if let Some(values) = matches.get_many::<String>("paper-types") {
for value in values {
types_vec.push(value.clone());
}
}

if let Some(values) = matches.get_many::<String>("paper-codes") {
for value in values {
codes_vec.push(value.clone());
}
}

if let Some(values) = matches.get_many::<String>("years") {
for value in values {
years_vec.push(value.clone());
}
}
println!("{}", sub_code);
println!("{:?}", types_vec);
println!("{:?}", codes_vec);
println!("{:?}", years_vec);

let (sub_code, types_vec, codes_vec, years_vec) = arg_parser();
println!("{sub_code}");
println!("{:?}", types_vec);
println!("{:?}", codes_vec);
println!("{:?}", years_vec);
}

0 comments on commit f6c0b2e

Please sign in to comment.