Skip to main content

append_record/
append_record.rs

1use std::fs;
2
3use recutils_rs::{Db, Record};
4
5fn main() {
6    let mut args = std::env::args().skip(1);
7    let path = args
8        .next()
9        .expect("usage: append_record <file.rec> <Type> Field=Value [Field=Value ...]");
10    let rset_type = args.next().expect("missing record type");
11    let pairs: Vec<(String, String)> = args
12        .map(|a| {
13            let (k, v) = a.split_once('=').expect("expected Field=Value");
14            (k.to_string(), v.to_string())
15        })
16        .collect();
17    assert!(!pairs.is_empty(), "need at least one Field=Value");
18
19    let text = fs::read_to_string(&path).expect("read file");
20    let mut db = Db::parse_str(&text).expect("parse");
21
22    let mut record = Record::new();
23    for (k, v) in &pairs {
24        record.append_field(k, v).expect("append field");
25    }
26
27    {
28        let mut rset = db
29            .rset_by_type(&rset_type)
30            .unwrap_or_else(|| panic!("no record set of type {rset_type:?}"));
31        rset.append_record(record).expect("append record");
32    }
33
34    let serialized = db.to_rec_string().expect("serialize");
35    fs::write(&path, serialized).expect("write file");
36    println!("appended 1 record to rset {rset_type:?} in {path}");
37}