aro/src/main.rs

29 lines
1.1 KiB
Rust
Raw Normal View History

2023-01-26 15:04:39 +01:00
#![feature(option_result_contains)]
2023-01-27 00:03:00 +01:00
use std::{collections::HashMap, time::Instant};
2022-11-11 15:00:07 +01:00
2023-01-26 23:07:16 +01:00
use data::CardInfo;
use filter::SearchCard;
mod data;
mod filter;
mod parser;
2022-11-11 15:00:07 +01:00
fn main() -> Result<(), Box<dyn std::error::Error>> {
2023-01-26 15:04:39 +01:00
let cards = serde_json::from_reader::<_, CardInfo>(std::io::BufReader::new(std::fs::File::open("cards.json")?))?.data;
let search_cards: Vec<_> = cards.iter().map(SearchCard::from).collect();
let cards_by_id: HashMap<_, _> = cards.into_iter().map(|c| (c.id, c)).collect();
2023-01-27 00:03:00 +01:00
let now = Instant::now();
let raw_query = std::env::args().nth(1).unwrap();
2023-01-26 23:07:16 +01:00
let query = parser::parse_filters(&raw_query)?;
2023-01-27 00:03:00 +01:00
let query_time = now.elapsed();
let now = Instant::now();
let matches: Vec<_> = search_cards.iter().filter(|card| query.iter().all(|q| q(card))).collect();
let filter_time = now.elapsed();
for c in &matches {
println!("{}\n", cards_by_id.get(&c.id).unwrap());
}
2023-01-27 00:03:00 +01:00
println!("Parsed query in {:?}", query_time);
println!("Searched {} cards in {:?} ({} hits)", search_cards.len(), filter_time, matches.len());
2023-01-26 23:07:16 +01:00
Ok(())
2022-10-05 17:57:01 +02:00
}