Skip to main content

symlib_roundtrip/
symlib_roundtrip.rs

1use std::env;
2use std::path::PathBuf;
3
4use kiutils_kicad::SymLibTableFile;
5
6fn usage() -> String {
7    "usage: symlib_roundtrip <input_sym-lib-table> <output_sym-lib-table>".to_string()
8}
9
10fn main() -> Result<(), String> {
11    let mut args = env::args().skip(1);
12    let in_path = args.next().map(PathBuf::from).ok_or_else(usage)?;
13    let out_path = args.next().map(PathBuf::from).ok_or_else(usage)?;
14
15    let mut doc = SymLibTableFile::read(&in_path).map_err(|e| e.to_string())?;
16    doc.set_version(7)
17        .rename_library("S", "S_EDITED")
18        .add_library("Extra", "${KIPRJMOD}/Extra.kicad_sym");
19
20    doc.write(&out_path).map_err(|e| e.to_string())?;
21    let reread = SymLibTableFile::read(&out_path).map_err(|e| e.to_string())?;
22
23    println!("input: {}", in_path.display());
24    println!("output: {}", out_path.display());
25    println!("library_count: {}", reread.ast().library_count);
26    println!(
27        "first_library_name: {:?}",
28        reread.ast().libraries.first().and_then(|l| l.name.clone())
29    );
30    println!("unknown_nodes: {}", reread.ast().unknown_nodes.len());
31
32    Ok(())
33}