app
KiCad - the KiCad Bridge
Public Made by Adomby adom
Reference implementation of the KiCad bridge: multi-instance Python server, forward path via kicad-cli, reverse path via in-process plugin. Most complex of the three bundled bridges.
← Commit history
rust: list_symbols timeout is not a refusal; placeholders for schematic, misc, install groups
12 files changed
+56−2
rust/crates/kicad-bridge/src/groups.rs+3rust/crates/kicad-bridge/src/main.rs+3rust/crates/kicad-bridge/src/verbs_install.rs+11rust/crates/kicad-bridge/src/verbs_libraries.rs+8−1rust/crates/kicad-bridge/src/verbs_misc.rs+11rust/crates/kicad-bridge/src/verbs_schematic.rs+11rust/crates/kicad-core/src/bridge_log.rs+1rust/crates/kicad-core/src/kicad_common.rs+1rust/crates/kicad-core/src/lib.rs+4rust/crates/kicad-core/src/libraries.rs+1−1rust/crates/kicad-core/src/render.rs+1rust/crates/kicad-core/src/schematic.rs+1rust/crates/kicad-bridge/src/groups.rs+3@@ -19,6 +19,9 @@ pub static GROUPS: &[Group] = &[ Group { name: "lint", verbs: || crate::verbs_lint::VERBS, dispatch: crate::verbs_lint::dispatch }, Group { name: "libraries", verbs: || crate::verbs_libraries::VERBS, dispatch: crate::verbs_libraries::dispatch }, Group { name: "maint", verbs: || crate::verbs_maint::VERBS, dispatch: crate::verbs_maint::dispatch },+ Group { name: "schematic", verbs: || crate::verbs_schematic::VERBS, dispatch: crate::verbs_schematic::dispatch },+ Group { name: "misc", verbs: || crate::verbs_misc::VERBS, dispatch: crate::verbs_misc::dispatch },+ Group { name: "install", verbs: || crate::verbs_install::VERBS, dispatch: crate::verbs_install::dispatch }, ]; pub fn dispatch(state: &mut State, command: &str, args: &Value) -> Option<Value> {
rust/crates/kicad-bridge/src/main.rs+3@@ -11,10 +11,13 @@ mod catalog; mod groups; mod util; mod verbs;+mod verbs_install; mod verbs_libraries; mod verbs_lint; mod verbs_maint;+mod verbs_misc; mod verbs_netlist;+mod verbs_schematic; use std::time::Instant;
rust/crates/kicad-bridge/src/verbs_install.rsadded+11@@ -0,0 +1,11 @@+//! Verb group "install". Placeholder until the port lands.+use serde_json::Value;++use crate::catalog::Verb;+use crate::util::State;++pub static VERBS: &[Verb] = &[];++pub fn dispatch(_state: &mut State, _command: &str, _args: &Value) -> Option<Value> {+ None+}
rust/crates/kicad-bridge/src/verbs_libraries.rs+8−1@@ -173,7 +173,14 @@ fn list_symbols(state: &mut State, args: &Value) -> Value { let v = libraries::kicad_parser_verdict(ctx.kicad_cli.as_deref(), &lib_path, Duration::from_secs(60)); let available = v["available"].as_bool().unwrap_or(false); let ok = v["ok"].as_bool().unwrap_or(false);- if available && !ok {+ if available && v["timedOut"].as_bool().unwrap_or(false) {+ // A deadline is not a refusal. Large stock libraries (Device has 500+ symbols) take+ // kicad-cli longer than 60 s to plot; the structural list above is still right.+ out["_hint"] = json!(format!(+ "The {} name(s) above come from the bridge's own parser. kicad-cli's plot check did not finish within 60 s on this library (large libraries take longer), so KiCad's own verdict is unknown, not negative. For a definitive check run kicad_lint_library on the file.",+ names.len()+ ));+ } else if available && !ok { out["_hint"] = json!(format!( "KiCad REFUSES this library ('{}'); the Symbol Editor shows it empty regardless of the {} name(s) above. kicad_adom_library_heal {{\"mode\":\"prune\"}} names the refused symbol(s).", v["error"].as_str().unwrap_or(""), names.len()
rust/crates/kicad-bridge/src/verbs_misc.rsadded+11@@ -0,0 +1,11 @@+//! Verb group "misc". Placeholder until the port lands.+use serde_json::Value;++use crate::catalog::Verb;+use crate::util::State;++pub static VERBS: &[Verb] = &[];++pub fn dispatch(_state: &mut State, _command: &str, _args: &Value) -> Option<Value> {+ None+}
rust/crates/kicad-bridge/src/verbs_schematic.rsadded+11@@ -0,0 +1,11 @@+//! Verb group "schematic". Placeholder until the port lands.+use serde_json::Value;++use crate::catalog::Verb;+use crate::util::State;++pub static VERBS: &[Verb] = &[];++pub fn dispatch(_state: &mut State, _command: &str, _args: &Value) -> Option<Value> {+ None+}
rust/crates/kicad-core/src/bridge_log.rsadded+1@@ -0,0 +1 @@+//! Placeholder: filled in by the phase 1 port.
rust/crates/kicad-core/src/kicad_common.rsadded+1@@ -0,0 +1 @@+//! Placeholder: filled in by the phase 1 port.
rust/crates/kicad-core/src/lib.rs+4@@ -9,3 +9,7 @@ pub mod design_rules; pub mod model_check; pub mod pcm; pub mod updates;+pub mod schematic;+pub mod kicad_common;+pub mod render;+pub mod bridge_log;
rust/crates/kicad-core/src/libraries.rs+1−1@@ -847,7 +847,7 @@ pub fn kicad_parser_verdict(cli: Option<&Path>, lib_path: &Path, timeout: Durati let r = crate::cli::run(cli, &["sym", "export", "svg", "-o", out_s.as_str(), lib_s.as_str()], timeout); let _ = std::fs::remove_dir_all(&out_dir); if r.timed_out {- return json!({"available": true, "ok": false, "symbols": [], "units": 0,+ return json!({"available": true, "ok": false, "timedOut": true, "symbols": [], "units": 0, "error": format!("kicad-cli did not answer within {}s", timeout.as_secs())}); } let text = format!("{}\n{}", r.stdout, r.stderr);
rust/crates/kicad-core/src/render.rsadded+1@@ -0,0 +1 @@+//! Placeholder: filled in by the phase 1 port.
rust/crates/kicad-core/src/schematic.rsadded+1@@ -0,0 +1 @@+//! Placeholder: filled in by the phase 1 port.