kiutils_kicad 0.3.0

Typed KiCad document model and codecs for seamless, lossless edit round-trips
Documentation
use std::path::PathBuf;

use kiutils_kicad::{
    DesignRulesFile, FootprintFile, FpLibTableFile, PcbFile, ProjectFile, SchematicFile,
    SymLibTableFile, WorksheetFile, WriteMode,
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let base = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
        .join("examples")
        .join("data");

    let pcb = PcbFile::read(base.join("sample.kicad_pcb"))?;
    println!("pcb version: {:?}", pcb.ast().version);
    println!("pcb unknown nodes: {}", pcb.ast().unknown_nodes.len());

    let footprint = FootprintFile::read(base.join("sample.kicad_mod"))?;
    println!("footprint version: {:?}", footprint.ast().version);

    let schematic = SchematicFile::read(base.join("sample.kicad_sch"))?;
    println!("schematic version: {:?}", schematic.ast().version);
    println!(
        "schematic unknown nodes: {}",
        schematic.ast().unknown_nodes.len()
    );

    let table = FpLibTableFile::read(base.join("fp-lib-table"))?;
    println!("fp libs: {}", table.ast().library_count);

    let sym_table = SymLibTableFile::read(base.join("sym-lib-table"))?;
    println!("sym libs: {}", sym_table.ast().library_count);

    let dru = DesignRulesFile::read(base.join("sample.kicad_dru"))?;
    println!("rules: {}", dru.ast().rule_count);
    println!("rule constraints: {}", dru.ast().total_constraint_count);

    let project = ProjectFile::read(base.join("sample.kicad_pro"))?;
    println!("project meta version: {:?}", project.ast().meta_version);

    let worksheet = WorksheetFile::read(base.join("sample.kicad_wks"))?;
    println!("worksheet version: {:?}", worksheet.ast().version);
    println!("worksheet tbtext count: {}", worksheet.ast().tbtext_count);

    pcb.write_mode("/tmp/out.kicad_pcb", WriteMode::Lossless)?;
    Ok(())
}