append_record/
append_record.rs1use 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}