Skip to main content

query_records/
query_records.rs

1use 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}