price_checker/src/main.rs

64 lines
1.8 KiB
Rust

extern crate anyhow;
extern crate clap;
extern crate url;
extern crate arraygen;
pub mod price_result;
pub mod parser;
pub mod price_checker;
use price_result::PriceResult;
use price_checker::PriceChecker;
use url::Url;
use anyhow::Result;
use clap::{Arg, App, SubCommand};
fn main() -> Result<()> {
let matches = App::new("Price checker")
.version("0.1")
.author("Rémi BERTHO <remi.bertho@dalan.fr>")
.about("Check price")
.subcommand(SubCommand::with_name("check")
.about("Check from an URL")
.arg(Arg::with_name("URL")
.required(true)
.multiple(true)
.help("The URL to get price")))
.subcommand(SubCommand::with_name("search")
.about("Search an object")
.arg(Arg::with_name("name")
.required(true)
.multiple(true)
.help("The name of the object")))
.get_matches();
let price_checker = PriceChecker::new().unwrap();
match matches.subcommand() {
("check", Some(check_matches)) => {
for url_str in check_matches.values_of("URL").unwrap() {
let url = Url::parse(url_str)?;
println!("{}", price_checker.get_price(&url)?) ;
}
},
("search", Some(check_matches)) => {
for name in check_matches.values_of("name").unwrap() {
let res = price_checker.search(name)? ;
if res.is_empty() {
println!("«{}» not found", name);
} else {
for (parser_name, url) in res {
let price = price_checker.get_price(&url)?;
println!(" - {}", parser_name) ;
println!(" * {}", url);
println!(" * {}", price);
}
}
}
},
_ => {
println!("{}", matches.usage());
},
}
Ok(())
}