2020-05-24 08:30:41 +00:00
|
|
|
extern crate anyhow;
|
2020-07-20 20:14:05 +00:00
|
|
|
extern crate arraygen;
|
2020-06-02 17:55:06 +00:00
|
|
|
extern crate clap;
|
2020-06-21 09:32:40 +00:00
|
|
|
extern crate url;
|
2020-05-24 08:30:41 +00:00
|
|
|
|
2020-05-11 19:21:57 +00:00
|
|
|
pub mod parser;
|
|
|
|
pub mod price_checker;
|
2020-07-20 20:14:05 +00:00
|
|
|
pub mod price_result;
|
2020-05-11 19:21:57 +00:00
|
|
|
|
2020-07-20 20:14:05 +00:00
|
|
|
use anyhow::Result;
|
|
|
|
use clap::{App, Arg, SubCommand};
|
2020-05-11 19:21:57 +00:00
|
|
|
use price_checker::PriceChecker;
|
2020-07-20 20:14:05 +00:00
|
|
|
use price_result::PriceResult;
|
2020-05-23 14:19:04 +00:00
|
|
|
use url::Url;
|
2020-05-11 19:21:57 +00:00
|
|
|
|
2020-05-24 08:30:41 +00:00
|
|
|
fn main() -> Result<()> {
|
2020-06-02 17:55:06 +00:00
|
|
|
let matches = App::new("Price checker")
|
2020-07-20 20:14:05 +00:00
|
|
|
.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")),
|
|
|
|
)
|
|
|
|
.subcommand(SubCommand::with_name("list").about("List the parsers"))
|
|
|
|
.get_matches();
|
2020-06-23 16:29:55 +00:00
|
|
|
let price_checker = PriceChecker::new().unwrap();
|
2020-06-02 17:55:06 +00:00
|
|
|
match matches.subcommand() {
|
2020-07-20 20:14:05 +00:00
|
|
|
("check", Some(check_matches)) => {
|
2020-06-02 17:55:06 +00:00
|
|
|
for url_str in check_matches.values_of("URL").unwrap() {
|
|
|
|
let url = Url::parse(url_str)?;
|
2020-07-20 20:14:05 +00:00
|
|
|
println!("{}", price_checker.get_price(&url)?);
|
2020-06-23 16:29:55 +00:00
|
|
|
}
|
2020-07-20 20:14:05 +00:00
|
|
|
}
|
|
|
|
("search", Some(check_matches)) => {
|
2020-06-23 16:29:55 +00:00
|
|
|
for name in check_matches.values_of("name").unwrap() {
|
2020-07-20 20:14:05 +00:00
|
|
|
let res = price_checker.search(name)?;
|
2020-06-23 16:29:55 +00:00
|
|
|
if res.is_empty() {
|
|
|
|
println!("«{}» not found", name);
|
|
|
|
} else {
|
|
|
|
for (parser_name, url) in res {
|
|
|
|
let price = price_checker.get_price(&url)?;
|
2020-07-20 20:14:05 +00:00
|
|
|
println!(" - {}", parser_name);
|
2020-06-23 16:29:55 +00:00
|
|
|
println!(" * {}", url);
|
|
|
|
println!(" * {}", price);
|
|
|
|
}
|
|
|
|
}
|
2020-06-02 17:55:06 +00:00
|
|
|
}
|
2020-07-20 20:14:05 +00:00
|
|
|
}
|
2020-07-20 19:56:49 +00:00
|
|
|
("list", _) => {
|
|
|
|
println!("Price parsers:");
|
|
|
|
for parser in price_checker.parser_list.get_price().iter() {
|
|
|
|
println!(" - {}", parser.name());
|
|
|
|
}
|
|
|
|
println!("Search parsers:");
|
|
|
|
for parser in price_checker.parser_list.get_search().iter() {
|
|
|
|
println!(" - {}", parser.name());
|
|
|
|
}
|
2020-07-20 20:14:05 +00:00
|
|
|
}
|
|
|
|
_ => {
|
2020-06-02 17:55:06 +00:00
|
|
|
println!("{}", matches.usage());
|
2020-07-20 20:14:05 +00:00
|
|
|
}
|
2020-06-02 17:55:06 +00:00
|
|
|
}
|
2020-05-24 08:30:41 +00:00
|
|
|
Ok(())
|
2020-05-11 18:32:43 +00:00
|
|
|
}
|