query_records/
query_records.rs1use std::fs;
2
3use recutils_rs::{Db, SelectionExpression};
4
5fn main() {
6 let mut args = std::env::args().skip(1);
7 let path = args
8 .next()
9 .expect("usage: query_records <file.rec> <Type> <selection-expression>");
10 let rset_type = args.next().expect("missing record type");
11 let expr = args.next().expect("missing selection expression");
12
13 let text = fs::read_to_string(&path).expect("read file");
14 let mut db = Db::parse_str(&text).expect("parse");
15
16 let rset = db
17 .rset_by_type(&rset_type)
18 .unwrap_or_else(|| panic!("no record set of type {rset_type:?}"));
19 let selection_expression =
20 SelectionExpression::compile(&expr, false).expect("compile selection expression");
21
22 let mut matches = 0usize;
23 for record in rset.records().filter(|r| selection_expression.matches(r)) {
24 matches += 1;
25 for field in record.fields() {
26 println!("{}: {}", field.name(), field.value());
27 }
28 println!();
29 }
30 eprintln!("{matches} match(es)");
31}