kicad_ipc_rs/lib.rs
1//! # KiCad IPC RS
2//!
3//! **Async-first, pure-Rust IPC bindings for KiCad's official API.**
4//! Production-focused Rust API surface, typed models, and a blocking wrapper for sync callers.
5//!
6//! ## Why this crate?
7//!
8//! | Capability | `kicad-ipc-rs` | Official Python bindings (`kicad-python`) | Official Rust bindings (`kicad-rs`) |
9//! | --- | --- | --- | --- |
10//! | Rust-native client API | ✅ Yes | ❌ Python package | ⚠️ Development preview |
11//! | Async-first API design | ✅ `KiCadClient` | ⚠️ App-managed event-loop model | ⚠️ Development preview |
12//! | Blocking support for sync apps | ✅ `feature = "blocking"` | ✅ Native Python sync usage | ⚠️ Development preview |
13//! | Wrapped KiCad command coverage (current proto snapshot) | ✅ 56/56 command wrappers | Unknown | Unknown |
14//! | Maintainer focus | ✅ This crate is actively maintained for Rust users | ✅ Official KiCad Python package | ⚠️ Preview status |
15//!
16//! Evidence and references:
17//! - `kicad-python` package: <https://gitlab.com/kicad/code/kicad-python>
18//! - `kicad-rs` package (states "development preview with no docs yet"): <https://gitlab.com/kicad/code/kicad-rs>
19//! - Coverage matrix and runtime notes: <https://github.com/Milind220/kicad-ipc-rs#kicad-v10-rc11-api-completion-matrix>
20//!
21//! ## Quickstart (async)
22//!
23//! ```no_run
24//! use kicad_ipc_rs::KiCadClient;
25//!
26//! #[tokio::main(flavor = "current_thread")]
27//! async fn main() -> Result<(), kicad_ipc_rs::KiCadError> {
28//! let client = KiCadClient::connect().await?;
29//! client.ping().await?;
30//! let version = client.get_version().await?;
31//! println!("KiCad: {}", version.full_version);
32//! Ok(())
33//! }
34//! ```
35//!
36//! ## Quickstart (blocking)
37//!
38//! ```no_run
39//! # #[cfg(feature = "blocking")]
40//! # fn run() -> Result<(), kicad_ipc_rs::KiCadError> {
41//! use kicad_ipc_rs::KiCadClientBlocking;
42//! let client = KiCadClientBlocking::connect()?;
43//! let version = client.get_version()?;
44//! println!("KiCad: {}", version.full_version);
45//! # Ok(())
46//! # }
47//! ```
48//!
49//! Architecture layers:
50//! - transport
51//! - envelope
52//! - command builders
53//! - high-level client
54
55#![warn(missing_docs)]
56
57/// High-level async client and request/response convenience methods.
58pub mod client;
59/// Low-level command payload builders.
60///
61/// This module is public for advanced integrations and debugging, but most users
62/// should prefer [`crate::client::KiCadClient`] methods.
63pub mod commands;
64/// Envelope helpers for command/response packing and unpacking.
65///
66/// This is primarily an advanced/internal surface.
67pub mod envelope;
68/// Error types returned by this crate.
69pub mod error;
70mod kicad_api_version;
71/// Stable data models used by typed client APIs.
72pub mod model;
73/// IPC transport implementation details.
74///
75/// Most applications should not need to use this module directly.
76pub mod transport;
77
78#[cfg(feature = "blocking")]
79/// Blocking wrapper over the async client.
80pub mod blocking;
81
82pub(crate) mod proto;
83
84#[cfg(feature = "blocking")]
85pub use crate::blocking::{KiCadClientBlocking, KiCadClientBlockingBuilder};
86pub use crate::client::{ClientBuilder, KiCadClient};
87pub use crate::error::KiCadError;
88pub use crate::kicad_api_version::KICAD_API_VERSION;
89pub use crate::model::board::{
90 ArcStartMidEndNm, BoardEditorAppearanceSettings, BoardEnabledLayers, BoardFlipMode,
91 BoardLayerClass, BoardLayerGraphicsDefault, BoardLayerInfo, BoardNet, BoardOriginKind,
92 BoardStackup, BoardStackupDielectricProperties, BoardStackupLayer, BoardStackupLayerType,
93 ColorRgba, DrcSeverity, GraphicsDefaults, InactiveLayerDisplayMode, NetClassBoardSettings,
94 NetClassForNetEntry, NetClassInfo, NetClassType, NetColorDisplayMode, PadNetEntry,
95 PadShapeAsPolygonEntry, PadstackPresenceEntry, PadstackPresenceState, PcbArc,
96 PcbBoardGraphicShape, PcbBoardText, PcbBoardTextBox, PcbDimension, PcbField, PcbFootprint,
97 PcbGroup, PcbItem, PcbPad, PcbPadType, PcbTrack, PcbUnknownItem, PcbVia, PcbViaLayers,
98 PcbViaType, PcbZone, PcbZoneType, PolyLineNm, PolyLineNodeGeometryNm, PolygonWithHolesNm,
99 RatsnestDisplayMode, Vector2Nm,
100};
101pub use crate::model::common::{
102 CommitAction, CommitSession, DocumentSpecifier, DocumentType, EditorFrameType, ItemBoundingBox,
103 ItemHitTestResult, MapMergeMode, PcbObjectTypeCode, RunActionStatus, SelectionItemDetail,
104 SelectionSummary, SelectionTypeCount, TextAsShapesEntry, TextAttributesSpec, TextBoxSpec,
105 TextExtents, TextHorizontalAlignment, TextObjectSpec, TextShape, TextShapeGeometry, TextSpec,
106 TextVerticalAlignment, TitleBlockInfo, VersionInfo,
107};