refactor: ship generated protobuf bindings

This commit is contained in:
Milind Sharma 2026-02-21 00:36:04 +08:00
parent 358b27e0ff
commit a46f6edae4
15 changed files with 4863 additions and 545 deletions

3
.gitmodules vendored
View File

@ -1,3 +0,0 @@
[submodule "kicad"]
path = kicad
url = https://gitlab.com/kicad/code/kicad.git

460
Cargo.lock generated
View File

@ -2,27 +2,12 @@
# It is not intended for manual editing.
version = 4
[[package]]
name = "aho-corasick"
version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
dependencies = [
"memchr",
]
[[package]]
name = "anyhow"
version = "1.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea"
[[package]]
name = "bitflags"
version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
[[package]]
name = "bytes"
version = "1.11.1"
@ -39,12 +24,6 @@ dependencies = [
"shlex",
]
[[package]]
name = "cfg-if"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "cmake"
version = "0.1.57"
@ -60,98 +39,12 @@ version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]]
name = "equivalent"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "errno"
version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
"windows-sys",
]
[[package]]
name = "fastrand"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]]
name = "find-msvc-tools"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
[[package]]
name = "fixedbitset"
version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
[[package]]
name = "foldhash"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]]
name = "getrandom"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec"
dependencies = [
"cfg-if",
"libc",
"r-efi",
"wasip2",
"wasip3",
]
[[package]]
name = "hashbrown"
version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
"foldhash",
]
[[package]]
name = "hashbrown"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "id-arena"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
[[package]]
name = "indexmap"
version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
dependencies = [
"equivalent",
"hashbrown 0.16.1",
"serde",
"serde_core",
]
[[package]]
name = "itertools"
version = "0.14.0"
@ -161,61 +54,24 @@ dependencies = [
"either",
]
[[package]]
name = "itoa"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
[[package]]
name = "kicad-ipc-rs"
version = "0.1.0"
dependencies = [
"nng",
"prost",
"prost-build",
"prost-types",
"thiserror",
"tokio",
"tracing",
]
[[package]]
name = "leb128fmt"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]]
name = "libc"
version = "0.2.182"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112"
[[package]]
name = "linux-raw-sys"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
[[package]]
name = "log"
version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
[[package]]
name = "memchr"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
[[package]]
name = "multimap"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084"
[[package]]
name = "nng"
version = "1.0.1"
@ -242,33 +98,12 @@ version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "petgraph"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455"
dependencies = [
"fixedbitset",
"hashbrown 0.15.5",
"indexmap",
]
[[package]]
name = "pin-project-lite"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
[[package]]
name = "prettyplease"
version = "0.2.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
dependencies = [
"proc-macro2",
"syn",
]
[[package]]
name = "proc-macro2"
version = "1.0.106"
@ -288,25 +123,6 @@ dependencies = [
"prost-derive",
]
[[package]]
name = "prost-build"
version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7"
dependencies = [
"heck",
"itertools",
"log",
"multimap",
"petgraph",
"prettyplease",
"prost",
"prost-types",
"regex",
"syn",
"tempfile",
]
[[package]]
name = "prost-derive"
version = "0.14.3"
@ -338,102 +154,6 @@ dependencies = [
"proc-macro2",
]
[[package]]
name = "r-efi"
version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]]
name = "regex"
version = "1.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
"regex-syntax",
]
[[package]]
name = "regex-automata"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c"
[[package]]
name = "rustix"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34"
dependencies = [
"bitflags",
"errno",
"libc",
"linux-raw-sys",
"windows-sys",
]
[[package]]
name = "semver"
version = "1.0.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
[[package]]
name = "serde"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
dependencies = [
"serde_core",
]
[[package]]
name = "serde_core"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.149"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
dependencies = [
"itoa",
"memchr",
"serde",
"serde_core",
"zmij",
]
[[package]]
name = "shlex"
version = "1.3.0"
@ -451,19 +171,6 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "tempfile"
version = "3.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1"
dependencies = [
"fastrand",
"getrandom",
"once_cell",
"rustix",
"windows-sys",
]
[[package]]
name = "thiserror"
version = "2.0.18"
@ -542,175 +249,8 @@ version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]]
name = "unicode-xid"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
name = "version_check"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "wasip2"
version = "1.0.2+wasi-0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
dependencies = [
"wit-bindgen",
]
[[package]]
name = "wasip3"
version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
dependencies = [
"wit-bindgen",
]
[[package]]
name = "wasm-encoder"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
dependencies = [
"leb128fmt",
"wasmparser",
]
[[package]]
name = "wasm-metadata"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
dependencies = [
"anyhow",
"indexmap",
"wasm-encoder",
"wasmparser",
]
[[package]]
name = "wasmparser"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
dependencies = [
"bitflags",
"hashbrown 0.15.5",
"indexmap",
"semver",
]
[[package]]
name = "windows-link"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
[[package]]
name = "windows-sys"
version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
dependencies = [
"windows-link",
]
[[package]]
name = "wit-bindgen"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
dependencies = [
"wit-bindgen-rust-macro",
]
[[package]]
name = "wit-bindgen-core"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
dependencies = [
"anyhow",
"heck",
"wit-parser",
]
[[package]]
name = "wit-bindgen-rust"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
dependencies = [
"anyhow",
"heck",
"indexmap",
"prettyplease",
"syn",
"wasm-metadata",
"wit-bindgen-core",
"wit-component",
]
[[package]]
name = "wit-bindgen-rust-macro"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
dependencies = [
"anyhow",
"prettyplease",
"proc-macro2",
"quote",
"syn",
"wit-bindgen-core",
"wit-bindgen-rust",
]
[[package]]
name = "wit-component"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
dependencies = [
"anyhow",
"bitflags",
"indexmap",
"log",
"serde",
"serde_derive",
"serde_json",
"wasm-encoder",
"wasm-metadata",
"wasmparser",
"wit-parser",
]
[[package]]
name = "wit-parser"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
dependencies = [
"anyhow",
"id-arena",
"indexmap",
"log",
"semver",
"serde",
"serde_derive",
"serde_json",
"unicode-xid",
"wasmparser",
]
[[package]]
name = "zmij"
version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"

View File

@ -4,16 +4,13 @@ version = "0.1.0"
edition = "2021"
license = "MIT"
description = "Rust client library for the KiCad IPC API (async-first)"
repository = "https://github.com/Milind220/kicad-api-rust"
homepage = "https://github.com/Milind220/kicad-api-rust"
repository = "https://github.com/Milind220/kicad-ipc-rs"
homepage = "https://github.com/Milind220/kicad-ipc-rs"
readme = "README.md"
keywords = ["kicad", "eda", "pcb", "ipc"]
categories = ["api-bindings", "asynchronous"]
include = [
"/src/**",
"/kicad/api/proto/**",
"/.gitmodules",
"/build.rs",
"/README.md",
"/LICENSE",
"/Cargo.toml",
@ -32,6 +29,3 @@ prost-types = { version = "0.14.1", optional = true }
thiserror = "2.0.12"
tokio = { version = "1.48.0", features = ["sync", "time", "rt", "macros"], optional = true }
tracing = { version = "0.1.41", optional = true }
[build-dependencies]
prost-build = "0.14.1"

View File

@ -13,21 +13,12 @@ Alpha. `v0.1.0` release candidate.
- Real-world user testing: still limited.
- Issues and PRs welcome.
## Build Inputs
## Protobuf Source
This crate compiles protobuf definitions from a KiCad git submodule:
This crate ships checked-in Rust protobuf output under `src/proto/generated/`.
```bash
git submodule update --init --recursive
```
Default proto root: `kicad/api/proto`
Optional override:
```bash
KICAD_PROTO_ROOT=/absolute/path/to/api/proto cargo build
```
- Consumers do **not** need KiCad source checkout or git submodules.
- Maintainers can regenerate bindings from upstream KiCad proto as needed.
## Local Testing

View File

@ -1,52 +0,0 @@
use std::fs;
use std::io;
use std::path::{Path, PathBuf};
fn collect_proto_files(root: &Path, out: &mut Vec<PathBuf>) -> io::Result<()> {
for entry in fs::read_dir(root)? {
let entry = entry?;
let path = entry.path();
if path.is_dir() {
collect_proto_files(&path, out)?;
continue;
}
if path.extension().and_then(|ext| ext.to_str()) == Some("proto") {
out.push(path);
}
}
Ok(())
}
fn main() {
let proto_root = std::env::var_os("KICAD_PROTO_ROOT")
.map(PathBuf::from)
.unwrap_or_else(|| PathBuf::from("kicad/api/proto"));
if !proto_root.exists() {
panic!(
"KiCad proto root not found at '{}'. Initialize submodule with `git submodule update --init --recursive` or set KICAD_PROTO_ROOT.",
proto_root.display()
);
}
println!("cargo:rerun-if-changed={}", proto_root.display());
let mut proto_files = Vec::new();
collect_proto_files(&proto_root, &mut proto_files).unwrap_or_else(|err| {
panic!(
"failed to enumerate proto files under {}: {err}",
proto_root.display()
)
});
proto_files.sort();
let mut config = prost_build::Config::new();
config.protoc_arg("--experimental_allow_proto3_optional");
config
.compile_protos(&proto_files, &[proto_root])
.expect("failed to compile KiCad protobuf schema");
}

1
kicad

@ -1 +0,0 @@
Subproject commit b512143573edd2f5814ed1dc1a46a37f6c76be19

View File

@ -0,0 +1,543 @@
// This file is @generated by prost-build.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetBoardStackup {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct BoardStackupResponse {
#[prost(message, optional, tag = "1")]
pub stackup: ::core::option::Option<super::BoardStackup>,
}
/// Changes the stackup for the given board according to the contents of the message (**not yet implemented**)
/// WARNING: any existing content on layers that are removed by this call is deleted. This operation cannot be undone.
/// Returns BoardStackupResponse with the updated stackup, in normalized form
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateBoardStackup {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
#[prost(message, optional, tag = "2")]
pub stackup: ::core::option::Option<super::BoardStackup>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetBoardEnabledLayers {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BoardEnabledLayersResponse {
/// The number of copper layers enabled in this board.
#[prost(uint32, tag = "1")]
pub copper_layer_count: u32,
/// A list of all layers enabled in this board, including copper layers and ones which cannot be disabled.
#[prost(enumeration = "super::types::BoardLayer", repeated, tag = "2")]
pub layers: ::prost::alloc::vec::Vec<i32>,
}
/// Changes which layers are enabled in the board stackup
/// WARNING: any existing content on layers that are removed by this call is deleted. This operation cannot be undone.
/// Returns BoardEnabledLayersResponse with the updated layer set.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SetBoardEnabledLayers {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
/// The number of copper layers to enable in the board. Currently, this must be an even number >= 2.
#[prost(uint32, tag = "2")]
pub copper_layer_count: u32,
/// The non-copper layers to enable. Note that any copper layers in this list are ignored; copper layers are enabled
/// by setting copper_layer_count. Note that the F/B.Courtyard, Edge.Cuts, and Margin layers cannot be disabled and
/// will be present in the board even if they are omitted from this list.
#[prost(enumeration = "super::types::BoardLayer", repeated, tag = "3")]
pub layers: ::prost::alloc::vec::Vec<i32>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetGraphicsDefaults {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GraphicsDefaultsResponse {
#[prost(message, optional, tag = "1")]
pub defaults: ::core::option::Option<super::GraphicsDefaults>,
}
/// Returns a Vector2 with the specified origin point
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetBoardOrigin {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
#[prost(enumeration = "BoardOriginType", tag = "2")]
pub r#type: i32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SetBoardOrigin {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
#[prost(enumeration = "BoardOriginType", tag = "2")]
pub r#type: i32,
#[prost(message, optional, tag = "3")]
pub origin: ::core::option::Option<super::super::common::types::Vector2>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetNets {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
/// If provided, will only return nets that belong to the given netclass.
/// If more than one netclass_filter is given, nets belonging to any of the given classes will
/// be returned.
#[prost(string, repeated, tag = "2")]
pub netclass_filter: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct NetsResponse {
#[prost(message, repeated, tag = "1")]
pub nets: ::prost::alloc::vec::Vec<super::types::Net>,
}
/// Retrieve all the copper items belonging to a certain net or set of nets
/// returns kiapi.common.commands.GetItemsResponse
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetItemsByNet {
/// Specifies which document to query, which fields to return, etc.
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::super::common::types::ItemHeader>,
/// List of one or more types of items to retreive
#[prost(
enumeration = "super::super::common::types::KiCadObjectType",
repeated,
tag = "2"
)]
pub types: ::prost::alloc::vec::Vec<i32>,
/// A list of net codes to filter items by
#[prost(message, repeated, tag = "3")]
pub net_codes: ::prost::alloc::vec::Vec<super::types::NetCode>,
}
/// Retrieve all the copper items belonging to a certain net class or set of net classes
/// returns kiapi.common.commands.GetItemsResponse
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetItemsByNetClass {
/// Specifies which document to query, which fields to return, etc.
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::super::common::types::ItemHeader>,
/// List of one or more types of items to retreive
#[prost(
enumeration = "super::super::common::types::KiCadObjectType",
repeated,
tag = "2"
)]
pub types: ::prost::alloc::vec::Vec<i32>,
/// A list of net class names to filter items by
#[prost(string, repeated, tag = "3")]
pub net_classes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
/// A net may be part of multiple classes that have a priority ordering, which will result in a
/// composite "effective" netclass containing the merged/overridden properties of all the constituent
/// netclasses it contains. This message retrieves this effective netclass for a net or list of
/// nets.
/// Returns NetClassForNetsResponse
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetNetClassForNets {
#[prost(message, repeated, tag = "1")]
pub net: ::prost::alloc::vec::Vec<super::types::Net>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct NetClassForNetsResponse {
/// Map of net name to netclass info
#[prost(map = "string, message", tag = "1")]
pub classes: ::std::collections::HashMap<
::prost::alloc::string::String,
super::super::common::project::NetClass,
>,
}
/// Refills some or all zones on the board.
/// This is a blocking operation; it will return Empty immediately, but KiCad will return
/// ApiStatusCode.AS_BUSY to all future API requests until the zone fill has completed.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct RefillZones {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
/// A list of zones to refill. If empty, all zones are refilled.
#[prost(message, repeated, tag = "2")]
pub zones: ::prost::alloc::vec::Vec<super::super::common::types::Kiid>,
}
/// Computes the polygon representation of a pad, merging any custom shapes together.
/// This representation will approximate curves as a series of segments.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetPadShapeAsPolygon {
/// The board to process
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
/// A list of one or more pads to process
#[prost(message, repeated, tag = "2")]
pub pads: ::prost::alloc::vec::Vec<super::super::common::types::Kiid>,
/// The layer to process
#[prost(enumeration = "super::types::BoardLayer", tag = "3")]
pub layer: i32,
}
/// Returned from GetPadShapeAsPolygon. The pads and polygons repeated fields will have the same length
/// and can be treated as a list of tuples.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct PadShapeAsPolygonResponse {
/// The pads that were processed
#[prost(message, repeated, tag = "1")]
pub pads: ::prost::alloc::vec::Vec<super::super::common::types::Kiid>,
/// The polygon representation of each pad
#[prost(message, repeated, tag = "2")]
pub polygons: ::prost::alloc::vec::Vec<
super::super::common::types::PolygonWithHoles,
>,
}
/// Tests if the given set of items with padstacks (pads or vias) has content on the given set of layers.
/// This is a dynamic call rather than a property of the padstack because pads and vias can be set to only include
/// shapes on connected copper layers, and whether or not the pad is connected can't be determined in isolation.
/// To optimize API call performance, multiple items and multiple layers to test may be passed in with this
/// command message. The return will include the results for each valid item on each valid layer.
/// Note that not all layers make sense for a given item (for example, testing against BL_UNDEFINED never makes
/// sense). In general, the internal KiCad APIs will not return an error when testing non-sensical layers for a given
/// item, and instead will return a default of "true" for any such layers.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CheckPadstackPresenceOnLayers {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
#[prost(message, repeated, tag = "2")]
pub items: ::prost::alloc::vec::Vec<super::super::common::types::Kiid>,
#[prost(enumeration = "super::types::BoardLayer", repeated, tag = "3")]
pub layers: ::prost::alloc::vec::Vec<i32>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PadstackPresenceEntry {
#[prost(message, optional, tag = "1")]
pub item: ::core::option::Option<super::super::common::types::Kiid>,
#[prost(enumeration = "super::types::BoardLayer", tag = "2")]
pub layer: i32,
#[prost(enumeration = "PadstackPresence", tag = "3")]
pub presence: i32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct PadstackPresenceResponse {
#[prost(message, repeated, tag = "1")]
pub entries: ::prost::alloc::vec::Vec<PadstackPresenceEntry>,
}
/// Returns InjectDrcErrorResponse
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct InjectDrcError {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
#[prost(enumeration = "DrcSeverity", tag = "2")]
pub severity: i32,
#[prost(string, tag = "3")]
pub message: ::prost::alloc::string::String,
#[prost(message, optional, tag = "4")]
pub position: ::core::option::Option<super::super::common::types::Vector2>,
#[prost(message, repeated, tag = "5")]
pub items: ::prost::alloc::vec::Vec<super::super::common::types::Kiid>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct InjectDrcErrorResponse {
#[prost(message, optional, tag = "1")]
pub marker: ::core::option::Option<super::super::common::types::Kiid>,
}
/// returns BoardLayers
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetVisibleLayers {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BoardLayerResponse {
#[prost(enumeration = "super::types::BoardLayer", tag = "1")]
pub layer: i32,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BoardLayers {
#[prost(enumeration = "super::types::BoardLayer", repeated, tag = "1")]
pub layers: ::prost::alloc::vec::Vec<i32>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SetVisibleLayers {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
#[prost(enumeration = "super::types::BoardLayer", repeated, tag = "2")]
pub layers: ::prost::alloc::vec::Vec<i32>,
}
/// returns BoardLayerResponse
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetActiveLayer {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SetActiveLayer {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
#[prost(enumeration = "super::types::BoardLayer", tag = "2")]
pub layer: i32,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BoardEditorAppearanceSettings {
#[prost(enumeration = "InactiveLayerDisplayMode", tag = "1")]
pub inactive_layer_display: i32,
#[prost(enumeration = "NetColorDisplayMode", tag = "2")]
pub net_color_display: i32,
#[prost(enumeration = "BoardFlipMode", tag = "3")]
pub board_flip: i32,
#[prost(enumeration = "RatsnestDisplayMode", tag = "4")]
pub ratsnest_display: i32,
}
/// Returns BoardEditorAppearanceSettings
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetBoardEditorAppearanceSettings {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SetBoardEditorAppearanceSettings {
#[prost(message, optional, tag = "1")]
pub settings: ::core::option::Option<BoardEditorAppearanceSettings>,
}
/// Selects and begins an interactive move of the given item(s).
/// NOTE: Takes ownership of the active commit, if one exists:
/// the move tool will push the commit when the user confirms the move,
/// or roll back the commit if the user cancels the move. Keep this in
/// mind if using this command in combination with commands that create
/// or modify items using an explicit commit.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct InteractiveMoveItems {
#[prost(message, optional, tag = "1")]
pub board: ::core::option::Option<super::super::common::types::DocumentSpecifier>,
#[prost(message, repeated, tag = "2")]
pub items: ::prost::alloc::vec::Vec<super::super::common::types::Kiid>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum BoardOriginType {
BotUnknown = 0,
BotGrid = 1,
BotDrill = 2,
}
impl BoardOriginType {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::BotUnknown => "BOT_UNKNOWN",
Self::BotGrid => "BOT_GRID",
Self::BotDrill => "BOT_DRILL",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"BOT_UNKNOWN" => Some(Self::BotUnknown),
"BOT_GRID" => Some(Self::BotGrid),
"BOT_DRILL" => Some(Self::BotDrill),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum PadstackPresence {
PspUnknown = 0,
/// The padstack has a shape on a given layer (is flashed)
PspPresent = 1,
/// The padstack has no shape on a given layer (is not flashed)
PspNotPresent = 2,
}
impl PadstackPresence {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::PspUnknown => "PSP_UNKNOWN",
Self::PspPresent => "PSP_PRESENT",
Self::PspNotPresent => "PSP_NOT_PRESENT",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"PSP_UNKNOWN" => Some(Self::PspUnknown),
"PSP_PRESENT" => Some(Self::PspPresent),
"PSP_NOT_PRESENT" => Some(Self::PspNotPresent),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum DrcSeverity {
DrsUnknown = 0,
DrsWarning = 1,
DrsError = 2,
DrsExclusion = 3,
DrsIgnore = 4,
DrsInfo = 5,
DrsAction = 6,
DrsDebug = 7,
DrsUndefined = 8,
}
impl DrcSeverity {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::DrsUnknown => "DRS_UNKNOWN",
Self::DrsWarning => "DRS_WARNING",
Self::DrsError => "DRS_ERROR",
Self::DrsExclusion => "DRS_EXCLUSION",
Self::DrsIgnore => "DRS_IGNORE",
Self::DrsInfo => "DRS_INFO",
Self::DrsAction => "DRS_ACTION",
Self::DrsDebug => "DRS_DEBUG",
Self::DrsUndefined => "DRS_UNDEFINED",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"DRS_UNKNOWN" => Some(Self::DrsUnknown),
"DRS_WARNING" => Some(Self::DrsWarning),
"DRS_ERROR" => Some(Self::DrsError),
"DRS_EXCLUSION" => Some(Self::DrsExclusion),
"DRS_IGNORE" => Some(Self::DrsIgnore),
"DRS_INFO" => Some(Self::DrsInfo),
"DRS_ACTION" => Some(Self::DrsAction),
"DRS_DEBUG" => Some(Self::DrsDebug),
"DRS_UNDEFINED" => Some(Self::DrsUndefined),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum InactiveLayerDisplayMode {
IldmUnknown = 0,
/// Inactive layers are shown
IldmNormal = 1,
/// Inactive layers are shown with dimmed colors
IldmDimmed = 2,
/// Inactive layers are hidden
IldmHidden = 3,
}
impl InactiveLayerDisplayMode {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::IldmUnknown => "ILDM_UNKNOWN",
Self::IldmNormal => "ILDM_NORMAL",
Self::IldmDimmed => "ILDM_DIMMED",
Self::IldmHidden => "ILDM_HIDDEN",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"ILDM_UNKNOWN" => Some(Self::IldmUnknown),
"ILDM_NORMAL" => Some(Self::IldmNormal),
"ILDM_DIMMED" => Some(Self::IldmDimmed),
"ILDM_HIDDEN" => Some(Self::IldmHidden),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum NetColorDisplayMode {
NcdmUnknown = 0,
/// Net and netclass colors are shown in the ratsnest and on all copper items
NcdmAll = 1,
/// Net and netclass colors are shown in the ratsnest only
NcdmRatsnest = 2,
/// Net and netclass colors are not shown
NcdmOff = 3,
}
impl NetColorDisplayMode {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::NcdmUnknown => "NCDM_UNKNOWN",
Self::NcdmAll => "NCDM_ALL",
Self::NcdmRatsnest => "NCDM_RATSNEST",
Self::NcdmOff => "NCDM_OFF",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"NCDM_UNKNOWN" => Some(Self::NcdmUnknown),
"NCDM_ALL" => Some(Self::NcdmAll),
"NCDM_RATSNEST" => Some(Self::NcdmRatsnest),
"NCDM_OFF" => Some(Self::NcdmOff),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum BoardFlipMode {
BfmUnknown = 0,
/// Normal ("non-flipped") mode
BfmNormal = 1,
/// "Flipped" mode, viewed from the back and mirrored around the X axis
BfmFlippedX = 2,
}
impl BoardFlipMode {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::BfmUnknown => "BFM_UNKNOWN",
Self::BfmNormal => "BFM_NORMAL",
Self::BfmFlippedX => "BFM_FLIPPED_X",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"BFM_UNKNOWN" => Some(Self::BfmUnknown),
"BFM_NORMAL" => Some(Self::BfmNormal),
"BFM_FLIPPED_X" => Some(Self::BfmFlippedX),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum RatsnestDisplayMode {
RdmUnknown = 0,
/// Ratsnest lines are drawn to objects even if they are on hidden layers
RdmAllLayers = 1,
/// Ratsnest lines are hidden when at least one endpoint is an item on a hidden layer
RdmVisibleLayers = 2,
}
impl RatsnestDisplayMode {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::RdmUnknown => "RDM_UNKNOWN",
Self::RdmAllLayers => "RDM_ALL_LAYERS",
Self::RdmVisibleLayers => "RDM_VISIBLE_LAYERS",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"RDM_UNKNOWN" => Some(Self::RdmUnknown),
"RDM_ALL_LAYERS" => Some(Self::RdmAllLayers),
"RDM_VISIBLE_LAYERS" => Some(Self::RdmVisibleLayers),
_ => None,
}
}
}

View File

@ -0,0 +1,190 @@
// This file is @generated by prost-build.
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BoardFinish {
#[prost(string, tag = "1")]
pub type_name: ::prost::alloc::string::String,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BoardImpedanceControl {
#[prost(bool, tag = "1")]
pub is_controlled: bool,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BoardEdgeConnector {}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Castellation {
#[prost(bool, tag = "1")]
pub has_castellated_pads: bool,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EdgePlating {
#[prost(bool, tag = "1")]
pub has_edge_plating: bool,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BoardEdgeSettings {
#[prost(message, optional, tag = "1")]
pub connector: ::core::option::Option<BoardEdgeConnector>,
#[prost(message, optional, tag = "2")]
pub castellation: ::core::option::Option<Castellation>,
#[prost(message, optional, tag = "3")]
pub plating: ::core::option::Option<EdgePlating>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BoardStackupCopperLayer {}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct BoardStackupDielectricProperties {
#[prost(double, tag = "1")]
pub epsilon_r: f64,
#[prost(double, tag = "2")]
pub loss_tangent: f64,
#[prost(string, tag = "3")]
pub material_name: ::prost::alloc::string::String,
#[prost(message, optional, tag = "4")]
pub thickness: ::core::option::Option<super::common::types::Distance>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct BoardStackupDielectricLayer {
/// A single dielectric slot (between copper layers) can be made up of multiple physical layers
#[prost(message, repeated, tag = "1")]
pub layer: ::prost::alloc::vec::Vec<BoardStackupDielectricProperties>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct BoardStackupLayer {
#[prost(message, optional, tag = "1")]
pub thickness: ::core::option::Option<super::common::types::Distance>,
#[prost(enumeration = "types::BoardLayer", tag = "2")]
pub layer: i32,
#[prost(bool, tag = "3")]
pub enabled: bool,
#[prost(enumeration = "BoardStackupLayerType", tag = "4")]
pub r#type: i32,
#[prost(message, optional, tag = "5")]
pub dielectric: ::core::option::Option<BoardStackupDielectricLayer>,
#[prost(message, optional, tag = "6")]
pub color: ::core::option::Option<super::common::types::Color>,
#[prost(string, tag = "7")]
pub material_name: ::prost::alloc::string::String,
/// The name of the layer shown in the KiCad GUI, which may be a default value like "F.Cu" or may
/// have been customized by the user. This field does not apply to dielectric layers.
#[prost(string, tag = "8")]
pub user_name: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct BoardStackup {
#[prost(message, optional, tag = "1")]
pub finish: ::core::option::Option<BoardFinish>,
#[prost(message, optional, tag = "2")]
pub impedance: ::core::option::Option<BoardImpedanceControl>,
/// NOTE: m_HasThicknessConstrains appears to be unused
#[prost(message, optional, tag = "3")]
pub edge: ::core::option::Option<BoardEdgeSettings>,
#[prost(message, repeated, tag = "4")]
pub layers: ::prost::alloc::vec::Vec<BoardStackupLayer>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct BoardLayerGraphicsDefaults {
#[prost(enumeration = "BoardLayerClass", tag = "1")]
pub layer: i32,
#[prost(message, optional, tag = "2")]
pub text: ::core::option::Option<super::common::types::TextAttributes>,
#[prost(message, optional, tag = "3")]
pub line_thickness: ::core::option::Option<super::common::types::Distance>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GraphicsDefaults {
#[prost(message, repeated, tag = "1")]
pub layers: ::prost::alloc::vec::Vec<BoardLayerGraphicsDefaults>,
}
/// Anything that isn't stackup or design rules
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct BoardSettings {
/// Dimension default settings
#[prost(message, optional, tag = "1")]
pub graphics_defaults: ::core::option::Option<GraphicsDefaults>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BoardDesignRules {}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum BoardStackupLayerType {
BsltUnknown = 0,
BsltCopper = 1,
BsltDielectric = 2,
BsltSilkscreen = 3,
BsltSoldermask = 4,
BsltSolderpaste = 5,
BsltUndefined = 7,
}
impl BoardStackupLayerType {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::BsltUnknown => "BSLT_UNKNOWN",
Self::BsltCopper => "BSLT_COPPER",
Self::BsltDielectric => "BSLT_DIELECTRIC",
Self::BsltSilkscreen => "BSLT_SILKSCREEN",
Self::BsltSoldermask => "BSLT_SOLDERMASK",
Self::BsltSolderpaste => "BSLT_SOLDERPASTE",
Self::BsltUndefined => "BSLT_UNDEFINED",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"BSLT_UNKNOWN" => Some(Self::BsltUnknown),
"BSLT_COPPER" => Some(Self::BsltCopper),
"BSLT_DIELECTRIC" => Some(Self::BsltDielectric),
"BSLT_SILKSCREEN" => Some(Self::BsltSilkscreen),
"BSLT_SOLDERMASK" => Some(Self::BsltSoldermask),
"BSLT_SOLDERPASTE" => Some(Self::BsltSolderpaste),
"BSLT_UNDEFINED" => Some(Self::BsltUndefined),
_ => None,
}
}
}
/// LAYER_CLASS_* in BOARD_DESIGN_SETTINGS -- needs to become an enum class
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum BoardLayerClass {
BlcUnknown = 0,
BlcSilkscreen = 1,
BlcCopper = 2,
BlcEdges = 3,
BlcCourtyard = 4,
BlcFabrication = 5,
BlcOther = 6,
}
impl BoardLayerClass {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::BlcUnknown => "BLC_UNKNOWN",
Self::BlcSilkscreen => "BLC_SILKSCREEN",
Self::BlcCopper => "BLC_COPPER",
Self::BlcEdges => "BLC_EDGES",
Self::BlcCourtyard => "BLC_COURTYARD",
Self::BlcFabrication => "BLC_FABRICATION",
Self::BlcOther => "BLC_OTHER",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"BLC_UNKNOWN" => Some(Self::BlcUnknown),
"BLC_SILKSCREEN" => Some(Self::BlcSilkscreen),
"BLC_COPPER" => Some(Self::BlcCopper),
"BLC_EDGES" => Some(Self::BlcEdges),
"BLC_COURTYARD" => Some(Self::BlcCourtyard),
"BLC_FABRICATION" => Some(Self::BlcFabrication),
"BLC_OTHER" => Some(Self::BlcOther),
_ => None,
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,676 @@
// This file is @generated by prost-build.
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetVersion {}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetVersionResponse {
#[prost(message, optional, tag = "1")]
pub version: ::core::option::Option<super::types::KiCadVersion>,
}
/// A command to check if the connection to KiCad is OK
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Ping {}
/// Returns the full path to the given KiCad binary
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetKiCadBinaryPath {
/// The short name of the binary, such as `kicad-cli` or `kicad-cli.exe`. If on Windows, an `.exe`
/// extension will be assumed if not present.
#[prost(string, tag = "1")]
pub binary_name: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PathResponse {
#[prost(string, tag = "1")]
pub path: ::prost::alloc::string::String,
}
/// returns kiapi.common.types.Box2
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetTextExtents {
/// A temporary text item to calculate the bounding box for
#[prost(message, optional, tag = "1")]
pub text: ::core::option::Option<super::types::Text>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct TextOrTextBox {
#[prost(oneof = "text_or_text_box::Inner", tags = "1, 2")]
pub inner: ::core::option::Option<text_or_text_box::Inner>,
}
/// Nested message and enum types in `TextOrTextBox`.
pub mod text_or_text_box {
#[derive(Clone, PartialEq, ::prost::Oneof)]
pub enum Inner {
#[prost(message, tag = "1")]
Text(super::super::types::Text),
#[prost(message, tag = "2")]
Textbox(super::super::types::TextBox),
}
}
/// Render the given text object(s) as shapes. Depending on whether the text is using
/// the KiCad stroke font or a custom font, the response will be a compound shape containing
/// a set of polygons or a set of segments.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetTextAsShapes {
#[prost(message, repeated, tag = "1")]
pub text: ::prost::alloc::vec::Vec<TextOrTextBox>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct TextWithShapes {
#[prost(message, optional, tag = "1")]
pub text: ::core::option::Option<TextOrTextBox>,
#[prost(message, optional, tag = "2")]
pub shapes: ::core::option::Option<super::types::CompoundShape>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetTextAsShapesResponse {
#[prost(message, repeated, tag = "1")]
pub text_with_shapes: ::prost::alloc::vec::Vec<TextWithShapes>,
}
/// Return a writeable path that a plugin can use for storing persistent data such as configuration
/// files, etc. This path may not yet exist; actual creation of the directory for a given plugin is
/// up to the plugin itself. Files in this path will not be modified if the plugin is uninstalled or
/// upgraded.
///
/// Returns StringResponse
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetPluginSettingsPath {
/// The identifier of the plugin
#[prost(string, tag = "1")]
pub identifier: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct StringResponse {
#[prost(string, tag = "1")]
pub response: ::prost::alloc::string::String,
}
/// Refreshes the given frame, if that frame is open
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RefreshEditor {
#[prost(enumeration = "super::types::FrameType", tag = "1")]
pub frame: i32,
}
/// Retrieves a list of open documents of the given type
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetOpenDocuments {
/// Which type of documents to query
#[prost(enumeration = "super::types::DocumentType", tag = "1")]
pub r#type: i32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetOpenDocumentsResponse {
#[prost(message, repeated, tag = "1")]
pub documents: ::prost::alloc::vec::Vec<super::types::DocumentSpecifier>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SaveDocument {
#[prost(message, optional, tag = "1")]
pub document: ::core::option::Option<super::types::DocumentSpecifier>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SaveOptions {
/// Overwrite destination file(s) if they exist
#[prost(bool, tag = "1")]
pub overwrite: bool,
/// If the file being saved normally requires a project (for example, a board or schematic),
/// this flag will cause a new project to be saved alongside the new file
#[prost(bool, tag = "2")]
pub include_project: bool,
}
/// Saves the given document to a new location and does not open the new copy
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SaveCopyOfDocument {
#[prost(message, optional, tag = "1")]
pub document: ::core::option::Option<super::types::DocumentSpecifier>,
#[prost(string, tag = "2")]
pub path: ::prost::alloc::string::String,
#[prost(message, optional, tag = "3")]
pub options: ::core::option::Option<SaveOptions>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct RevertDocument {
#[prost(message, optional, tag = "1")]
pub document: ::core::option::Option<super::types::DocumentSpecifier>,
}
///
/// Runs a TOOL_ACTION using the TOOL_MANAGER of a given frame.
/// WARNING: The TOOL_ACTIONs are specifically *not* an API.
/// Command names may change as code is refactored, and commands may disappear.
/// This API method is provided for low-level prototyping purposes only.
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RunAction {
/// Action name, like "eeschema.InteractiveSelection.ClearSelection"
#[prost(string, tag = "1")]
pub action: ::prost::alloc::string::String,
}
///
/// NOTE: At the moment, RAS_FRAME_NOT_OPEN won't be returned as the handler is inside the frame.
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RunActionResponse {
#[prost(enumeration = "RunActionStatus", tag = "1")]
pub status: i32,
}
///
/// Begins a staged set of changes. Any modifications made to a document through the API after this
/// call will be saved to a pending commit, and will not appear in KiCad until a matching call to
/// END_COMMIT.
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BeginCommit {}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BeginCommitResponse {
/// Opaque identifier tracking a commit
#[prost(message, optional, tag = "1")]
pub id: ::core::option::Option<super::types::Kiid>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EndCommit {
/// The ID that was given by BeginCommit
#[prost(message, optional, tag = "1")]
pub id: ::core::option::Option<super::types::Kiid>,
/// What to do with this commit
#[prost(enumeration = "CommitAction", tag = "2")]
pub action: i32,
/// Optional message describing this changeset
#[prost(string, tag = "3")]
pub message: ::prost::alloc::string::String,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EndCommitResponse {}
/// Creates new items on a given document
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateItems {
/// Specifies which document to create on, which fields are included, etc.
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
/// List of items to create
#[prost(message, repeated, tag = "2")]
pub items: ::prost::alloc::vec::Vec<::prost_types::Any>,
/// Items may be created on a top-level document (sheet, board, etc) or inside a container
/// (symbol, footprint). If this field is not empty, it holds the ID of a symbol or footprint
/// that the items should be added to. This ID must be an existing symbol (for schematic
/// documents) or footprint (for board documents). If the given container does not exist or is
/// not the correct item type, the CreateItems call will fail.
#[prost(message, optional, tag = "3")]
pub container: ::core::option::Option<super::types::Kiid>,
}
/// Per-item status feedback for creation and update calls
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ItemStatus {
#[prost(enumeration = "ItemStatusCode", tag = "1")]
pub code: i32,
#[prost(string, tag = "2")]
pub error_message: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ItemCreationResult {
#[prost(message, optional, tag = "1")]
pub status: ::core::option::Option<ItemStatus>,
/// The created version of the item, including an updated KIID as applicable
#[prost(message, optional, tag = "2")]
pub item: ::core::option::Option<::prost_types::Any>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateItemsResponse {
/// Specifies which document was modified, which fields are included in created_items, etc.
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
/// Status of the overall request; may return IRS_OK even if no items were created
#[prost(enumeration = "super::types::ItemRequestStatus", tag = "2")]
pub status: i32,
/// Status of each item to be created
#[prost(message, repeated, tag = "3")]
pub created_items: ::prost::alloc::vec::Vec<ItemCreationResult>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetItems {
/// Specifies which document to query, which fields to return, etc.
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
/// List of one or more types of items to retreive
#[prost(enumeration = "super::types::KiCadObjectType", repeated, tag = "2")]
pub types: ::prost::alloc::vec::Vec<i32>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetItemsById {
/// Specifies which document to query, which fields to return, etc.
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
#[prost(message, repeated, tag = "2")]
pub items: ::prost::alloc::vec::Vec<super::types::Kiid>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetItemsResponse {
/// Specifies which document was modified, which fields are included in items, etc.
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
/// Status of the overall request; may return IRS_OK even if no items were retrieved
#[prost(enumeration = "super::types::ItemRequestStatus", tag = "2")]
pub status: i32,
#[prost(message, repeated, tag = "3")]
pub items: ::prost::alloc::vec::Vec<::prost_types::Any>,
}
/// Updates items in a given document
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateItems {
/// Specifies which document to modify, which fields are included, etc.
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
/// List of items to modify
#[prost(message, repeated, tag = "2")]
pub items: ::prost::alloc::vec::Vec<::prost_types::Any>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ItemUpdateResult {
#[prost(message, optional, tag = "1")]
pub status: ::core::option::Option<ItemStatus>,
/// The update version of the item
#[prost(message, optional, tag = "2")]
pub item: ::core::option::Option<::prost_types::Any>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateItemsResponse {
/// Specifies which document was modified, which fields are included in updated_items, etc.
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
/// Status of the overall request; may return IRS_OK even if no items were modified
#[prost(enumeration = "super::types::ItemRequestStatus", tag = "2")]
pub status: i32,
/// Status of each item to be created
#[prost(message, repeated, tag = "3")]
pub updated_items: ::prost::alloc::vec::Vec<ItemUpdateResult>,
}
/// Deletes items in a given document
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeleteItems {
/// Specifies which document to modify
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
/// List of item KIIDs to delete
#[prost(message, repeated, tag = "2")]
pub item_ids: ::prost::alloc::vec::Vec<super::types::Kiid>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ItemDeletionResult {
#[prost(message, optional, tag = "1")]
pub id: ::core::option::Option<super::types::Kiid>,
#[prost(enumeration = "ItemDeletionStatus", tag = "2")]
pub status: i32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeleteItemsResponse {
/// Specifies which document was modified, etc.
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
/// Status of the overall request; may return IRS_OK even if no items were deleted
#[prost(enumeration = "super::types::ItemRequestStatus", tag = "2")]
pub status: i32,
/// Status of each item requested to be deleted
#[prost(message, repeated, tag = "3")]
pub deleted_items: ::prost::alloc::vec::Vec<ItemDeletionResult>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetBoundingBox {
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
#[prost(message, repeated, tag = "2")]
pub items: ::prost::alloc::vec::Vec<super::types::Kiid>,
/// Some item types can have independently-movable text as children (e.g. footprints)
/// This mode controls whether or not these are included in the box
#[prost(enumeration = "BoundingBoxMode", tag = "3")]
pub mode: i32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetBoundingBoxResponse {
#[prost(message, repeated, tag = "1")]
pub items: ::prost::alloc::vec::Vec<super::types::Kiid>,
#[prost(message, repeated, tag = "2")]
pub boxes: ::prost::alloc::vec::Vec<super::types::Box2>,
}
/// Retrieves a list of items. Returns SelectionResponse
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetSelection {
/// Specifies which document to query for selected items.
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
/// An optional list of types to filter on.
/// If none are provided, all selected items will be returned.
#[prost(enumeration = "super::types::KiCadObjectType", repeated, tag = "2")]
pub types: ::prost::alloc::vec::Vec<i32>,
}
/// The set of currently selected items
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SelectionResponse {
#[prost(message, repeated, tag = "1")]
pub items: ::prost::alloc::vec::Vec<::prost_types::Any>,
}
/// Adds the given items to the selection. Returns SelectionResponse
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AddToSelection {
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
/// The items to select
#[prost(message, repeated, tag = "2")]
pub items: ::prost::alloc::vec::Vec<super::types::Kiid>,
}
/// Removes the given items to the selection. Returns SelectionResponse
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct RemoveFromSelection {
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
/// The items to deselect
#[prost(message, repeated, tag = "2")]
pub items: ::prost::alloc::vec::Vec<super::types::Kiid>,
}
/// Removes all items from selection
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ClearSelection {
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
}
/// Tests if a certain point falls within tolerance of an item's geometry
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct HitTest {
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<super::types::ItemHeader>,
#[prost(message, optional, tag = "2")]
pub id: ::core::option::Option<super::types::Kiid>,
#[prost(message, optional, tag = "3")]
pub position: ::core::option::Option<super::types::Vector2>,
#[prost(int32, tag = "4")]
pub tolerance: i32,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct HitTestResponse {
#[prost(enumeration = "HitTestResult", tag = "1")]
pub result: i32,
}
/// returns common.types.TitleBlockInfo
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetTitleBlockInfo {
#[prost(message, optional, tag = "1")]
pub document: ::core::option::Option<super::types::DocumentSpecifier>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SaveDocumentToString {
#[prost(message, optional, tag = "1")]
pub document: ::core::option::Option<super::types::DocumentSpecifier>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SavedDocumentResponse {
#[prost(message, optional, tag = "1")]
pub document: ::core::option::Option<super::types::DocumentSpecifier>,
#[prost(string, tag = "2")]
pub contents: ::prost::alloc::string::String,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SaveSelectionToString {}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SavedSelectionResponse {
#[prost(message, repeated, tag = "1")]
pub ids: ::prost::alloc::vec::Vec<super::types::Kiid>,
#[prost(string, tag = "2")]
pub contents: ::prost::alloc::string::String,
}
/// Attempts to parse the given string as a s-expression formatted container with items,
/// similar to how the Paste action inside the KiCad editor works. If the parse is successful,
/// the items will be created and inserted into the editor.
/// Returns CreateItemsResponse
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ParseAndCreateItemsFromString {
#[prost(message, optional, tag = "1")]
pub document: ::core::option::Option<super::types::DocumentSpecifier>,
#[prost(string, tag = "2")]
pub contents: ::prost::alloc::string::String,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum RunActionStatus {
RasUnknown = 0,
/// The action was submitted successfully.
RasOk = 1,
/// The action was unknown for the targeted frame.
RasInvalid = 2,
/// The targeted frame was not open when the call was submitted.
RasFrameNotOpen = 3,
}
impl RunActionStatus {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::RasUnknown => "RAS_UNKNOWN",
Self::RasOk => "RAS_OK",
Self::RasInvalid => "RAS_INVALID",
Self::RasFrameNotOpen => "RAS_FRAME_NOT_OPEN",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"RAS_UNKNOWN" => Some(Self::RasUnknown),
"RAS_OK" => Some(Self::RasOk),
"RAS_INVALID" => Some(Self::RasInvalid),
"RAS_FRAME_NOT_OPEN" => Some(Self::RasFrameNotOpen),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum CommitAction {
CmaUnknown = 0,
/// Commit the changes to the design
CmaCommit = 1,
/// Cancel this commit
CmaDrop = 2,
}
impl CommitAction {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::CmaUnknown => "CMA_UNKNOWN",
Self::CmaCommit => "CMA_COMMIT",
Self::CmaDrop => "CMA_DROP",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"CMA_UNKNOWN" => Some(Self::CmaUnknown),
"CMA_COMMIT" => Some(Self::CmaCommit),
"CMA_DROP" => Some(Self::CmaDrop),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum ItemStatusCode {
IscUnknown = 0,
/// The item was created or updated
IscOk = 1,
/// The item's type is not valid for the given document
IscInvalidType = 2,
/// The item to be created had a specified KIID and that KIID was already in use
IscExisting = 3,
/// The item to be updated did not exist in the given document
IscNonexistent = 4,
/// The item to be updated is not allowed to be modified by the API
IscImmutable = 5,
/// The item to be created does not have valid data for the given document
IscInvalidData = 7,
}
impl ItemStatusCode {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::IscUnknown => "ISC_UNKNOWN",
Self::IscOk => "ISC_OK",
Self::IscInvalidType => "ISC_INVALID_TYPE",
Self::IscExisting => "ISC_EXISTING",
Self::IscNonexistent => "ISC_NONEXISTENT",
Self::IscImmutable => "ISC_IMMUTABLE",
Self::IscInvalidData => "ISC_INVALID_DATA",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"ISC_UNKNOWN" => Some(Self::IscUnknown),
"ISC_OK" => Some(Self::IscOk),
"ISC_INVALID_TYPE" => Some(Self::IscInvalidType),
"ISC_EXISTING" => Some(Self::IscExisting),
"ISC_NONEXISTENT" => Some(Self::IscNonexistent),
"ISC_IMMUTABLE" => Some(Self::IscImmutable),
"ISC_INVALID_DATA" => Some(Self::IscInvalidData),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum ItemDeletionStatus {
IdsUnknown = 0,
IdsOk = 1,
/// The item did not exist in the given document
IdsNonexistent = 2,
/// The item is not allowed to be modified by the API
IdsImmutable = 3,
}
impl ItemDeletionStatus {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::IdsUnknown => "IDS_UNKNOWN",
Self::IdsOk => "IDS_OK",
Self::IdsNonexistent => "IDS_NONEXISTENT",
Self::IdsImmutable => "IDS_IMMUTABLE",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"IDS_UNKNOWN" => Some(Self::IdsUnknown),
"IDS_OK" => Some(Self::IdsOk),
"IDS_NONEXISTENT" => Some(Self::IdsNonexistent),
"IDS_IMMUTABLE" => Some(Self::IdsImmutable),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum BoundingBoxMode {
BbmUnknown = 0,
BbmItemOnly = 1,
BbmItemAndChildText = 2,
}
impl BoundingBoxMode {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::BbmUnknown => "BBM_UNKNOWN",
Self::BbmItemOnly => "BBM_ITEM_ONLY",
Self::BbmItemAndChildText => "BBM_ITEM_AND_CHILD_TEXT",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"BBM_UNKNOWN" => Some(Self::BbmUnknown),
"BBM_ITEM_ONLY" => Some(Self::BbmItemOnly),
"BBM_ITEM_AND_CHILD_TEXT" => Some(Self::BbmItemAndChildText),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum HitTestResult {
HtrUnknown = 0,
HtrNoHit = 1,
HtrHit = 2,
}
impl HitTestResult {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::HtrUnknown => "HTR_UNKNOWN",
Self::HtrNoHit => "HTR_NO_HIT",
Self::HtrHit => "HTR_HIT",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"HTR_UNKNOWN" => Some(Self::HtrUnknown),
"HTR_NO_HIT" => Some(Self::HtrNoHit),
"HTR_HIT" => Some(Self::HtrHit),
_ => None,
}
}
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GetNetClasses {}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct NetClassesResponse {
#[prost(message, repeated, tag = "1")]
pub net_classes: ::prost::alloc::vec::Vec<super::project::NetClass>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SetNetClasses {
#[prost(message, repeated, tag = "1")]
pub net_classes: ::prost::alloc::vec::Vec<super::project::NetClass>,
/// Whether to merge or replace the existing netclasses with the contents of this message
/// Note that this only happens at the level of netclass name: for example, if merge_mode is set to
/// MMM_MERGE, the design has netclasses \["Default", "HV"\], and this message has netclasses
/// \["Default", "LV"\], the resulting set will be \["Default", "HV", "LV"\] -- the Default netclass
/// will have its properties replaced with those in this message, the "LV" netclass will be added,
/// and the "HV" netclass will be left alone. If merge_mode is set to MMM_REPLACE, the "HV" class
/// will be erased. Note that there must always be a "Default" netclass, so it will not be erased
/// even if merge_mode is MMM_REPLACE and there is no "Default" class specified in this message.
#[prost(enumeration = "super::types::MapMergeMode", tag = "3")]
pub merge_mode: i32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ExpandTextVariables {
#[prost(message, optional, tag = "1")]
pub document: ::core::option::Option<super::types::DocumentSpecifier>,
#[prost(string, repeated, tag = "2")]
pub text: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ExpandTextVariablesResponse {
#[prost(string, repeated, tag = "1")]
pub text: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
/// returns kiapi.common.project.TextVariables
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetTextVariables {
#[prost(message, optional, tag = "1")]
pub document: ::core::option::Option<super::types::DocumentSpecifier>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SetTextVariables {
#[prost(message, optional, tag = "1")]
pub document: ::core::option::Option<super::types::DocumentSpecifier>,
#[prost(message, optional, tag = "2")]
pub variables: ::core::option::Option<super::project::TextVariables>,
/// Whether to merge or replace the existing text variables map with the contents of this message
#[prost(enumeration = "super::types::MapMergeMode", tag = "3")]
pub merge_mode: i32,
}

View File

@ -0,0 +1,97 @@
// This file is @generated by prost-build.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct NetClassBoardSettings {
#[prost(message, optional, tag = "1")]
pub clearance: ::core::option::Option<super::types::Distance>,
#[prost(message, optional, tag = "2")]
pub track_width: ::core::option::Option<super::types::Distance>,
#[prost(message, optional, tag = "3")]
pub diff_pair_track_width: ::core::option::Option<super::types::Distance>,
#[prost(message, optional, tag = "4")]
pub diff_pair_gap: ::core::option::Option<super::types::Distance>,
#[prost(message, optional, tag = "5")]
pub diff_pair_via_gap: ::core::option::Option<super::types::Distance>,
/// The default padstack to use for vias belonging to this netclass
/// Currently KiCad only supports specifying the drill diameter and annular size on all layers for
/// netclass via stacks. Complex padstacks and other via features cannot be specified here.
#[prost(message, optional, tag = "6")]
pub via_stack: ::core::option::Option<super::super::board::types::PadStack>,
/// The default padstack to use for microvias belonging to this netclass
/// Currently KiCad only supports specifying the drill diameter and annular size on all layers for
/// netclass via stacks. Complex padstacks and other via features cannot be specified here.
#[prost(message, optional, tag = "7")]
pub microvia_stack: ::core::option::Option<super::super::board::types::PadStack>,
#[prost(message, optional, tag = "8")]
pub color: ::core::option::Option<super::types::Color>,
/// Since 10.0.0
#[prost(string, optional, tag = "9")]
pub tuning_profile: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, Copy, PartialEq, ::prost::Message)]
pub struct NetClassSchematicSettings {
#[prost(message, optional, tag = "1")]
pub wire_width: ::core::option::Option<super::types::Distance>,
#[prost(message, optional, tag = "2")]
pub bus_width: ::core::option::Option<super::types::Distance>,
#[prost(message, optional, tag = "3")]
pub color: ::core::option::Option<super::types::Color>,
#[prost(enumeration = "super::types::StrokeLineStyle", optional, tag = "4")]
pub line_style: ::core::option::Option<i32>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct NetClass {
/// The name of the netclass (the literal string "Default" for the default netclass)
/// May be empty for composite netclasses
#[prost(string, tag = "1")]
pub name: ::prost::alloc::string::String,
#[prost(int32, optional, tag = "2")]
pub priority: ::core::option::Option<i32>,
#[prost(message, optional, tag = "3")]
pub board: ::core::option::Option<NetClassBoardSettings>,
#[prost(message, optional, tag = "4")]
pub schematic: ::core::option::Option<NetClassSchematicSettings>,
#[prost(enumeration = "NetClassType", tag = "5")]
pub r#type: i32,
/// If this is a composite netclass, a list of the names of the "real" netclasses that make it up
#[prost(string, repeated, tag = "6")]
pub constituents: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct TextVariables {
#[prost(map = "string, string", tag = "1")]
pub variables: ::std::collections::HashMap<
::prost::alloc::string::String,
::prost::alloc::string::String,
>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum NetClassType {
NctUnknown = 0,
/// An explicitly-defined netclass, created by the user and saved in the project file
NctExplicit = 1,
/// An implicit (effective) netclass, made up of multiple explicit netclasses
NctImplicit = 2,
}
impl NetClassType {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::NctUnknown => "NCT_UNKNOWN",
Self::NctExplicit => "NCT_EXPLICIT",
Self::NctImplicit => "NCT_IMPLICIT",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"NCT_UNKNOWN" => Some(Self::NctUnknown),
"NCT_EXPLICIT" => Some(Self::NctExplicit),
"NCT_IMPLICIT" => Some(Self::NctImplicit),
_ => None,
}
}
}

View File

@ -0,0 +1,108 @@
// This file is @generated by prost-build.
///
/// For future expansion: any header fields that should be sent with a request
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ApiRequestHeader {
/// An opaque string identifying a running instance of KiCad. If this is set to a non-empty
/// string in an API request, KiCad will reject the request if the value doesn't match its own
/// token. This can be used to let API clients make sure they are still talking to the same
/// instance of KiCad if they are long-running.
#[prost(string, tag = "1")]
pub kicad_token: ::prost::alloc::string::String,
/// A string identifying an API client. Should be set by the client to a value that is unique
/// to a specific instance of a client, for example the package name of the client plus its
/// process ID or a random string, e.g. "com.github.me.my_awesome_plugin-73951". The main purpose
/// of this name is to identify the client in debug logs.
#[prost(string, tag = "2")]
pub client_name: ::prost::alloc::string::String,
}
///
/// The top-level envelope container for an API request (message from a client to the KiCad API server)
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ApiRequest {
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<ApiRequestHeader>,
#[prost(message, optional, tag = "2")]
pub message: ::core::option::Option<::prost_types::Any>,
}
///
/// For future expansion: any header fields that should be sent with a response
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ApiResponseHeader {
/// / An opaque string identifying a running instance of KiCad.
#[prost(string, tag = "1")]
pub kicad_token: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ApiResponse {
#[prost(message, optional, tag = "1")]
pub header: ::core::option::Option<ApiResponseHeader>,
#[prost(message, optional, tag = "2")]
pub status: ::core::option::Option<ApiResponseStatus>,
#[prost(message, optional, tag = "3")]
pub message: ::core::option::Option<::prost_types::Any>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ApiResponseStatus {
/// / A code describing the category of error (or AS_OK if no error)
#[prost(enumeration = "ApiStatusCode", tag = "1")]
pub status: i32,
/// / A human-readable description of the error, if any
#[prost(string, tag = "2")]
pub error_message: ::prost::alloc::string::String,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum ApiStatusCode {
AsUnknown = 0,
/// Request succeeded
AsOk = 1,
/// Request timed out
AsTimeout = 2,
/// The request had invalid parameters or otherwise was illegal
AsBadRequest = 3,
/// KiCad has recently started and cannot handle API requests yet
AsNotReady = 4,
/// The request was not handled by KiCad
AsUnhandled = 5,
/// The kicad_token in the request didn't match this KiCad's token
AsTokenMismatch = 6,
/// KiCad is busy performing an operation and can't accept API commands
AsBusy = 7,
/// The requested API call has not yet been implemented
AsUnimplemented = 8,
}
impl ApiStatusCode {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::AsUnknown => "AS_UNKNOWN",
Self::AsOk => "AS_OK",
Self::AsTimeout => "AS_TIMEOUT",
Self::AsBadRequest => "AS_BAD_REQUEST",
Self::AsNotReady => "AS_NOT_READY",
Self::AsUnhandled => "AS_UNHANDLED",
Self::AsTokenMismatch => "AS_TOKEN_MISMATCH",
Self::AsBusy => "AS_BUSY",
Self::AsUnimplemented => "AS_UNIMPLEMENTED",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"AS_UNKNOWN" => Some(Self::AsUnknown),
"AS_OK" => Some(Self::AsOk),
"AS_TIMEOUT" => Some(Self::AsTimeout),
"AS_BAD_REQUEST" => Some(Self::AsBadRequest),
"AS_NOT_READY" => Some(Self::AsNotReady),
"AS_UNHANDLED" => Some(Self::AsUnhandled),
"AS_TOKEN_MISMATCH" => Some(Self::AsTokenMismatch),
"AS_BUSY" => Some(Self::AsBusy),
"AS_UNIMPLEMENTED" => Some(Self::AsUnimplemented),
_ => None,
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,79 @@
// This file is @generated by prost-build.
/// / Represents a schematic line segment, which may be a wire, bus, or graphical line
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Line {
#[prost(message, optional, tag = "1")]
pub id: ::core::option::Option<super::super::common::types::Kiid>,
#[prost(message, optional, tag = "2")]
pub start: ::core::option::Option<super::super::common::types::Vector2>,
#[prost(message, optional, tag = "3")]
pub end: ::core::option::Option<super::super::common::types::Vector2>,
/// *
/// One of: LAYER_BUS, LAYER_WIRE, LAYER_NOTES
#[prost(enumeration = "SchematicLayer", tag = "4")]
pub layer: i32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Text {
#[prost(message, optional, tag = "1")]
pub text: ::core::option::Option<super::super::common::types::Text>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LocalLabel {
#[prost(message, optional, tag = "1")]
pub id: ::core::option::Option<super::super::common::types::Kiid>,
#[prost(message, optional, tag = "2")]
pub position: ::core::option::Option<super::super::common::types::Vector2>,
#[prost(message, optional, tag = "3")]
pub text: ::core::option::Option<Text>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GlobalLabel {
#[prost(message, optional, tag = "1")]
pub id: ::core::option::Option<super::super::common::types::Kiid>,
#[prost(message, optional, tag = "2")]
pub position: ::core::option::Option<super::super::common::types::Vector2>,
#[prost(message, optional, tag = "3")]
pub text: ::core::option::Option<Text>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct HierarchicalLabel {
#[prost(message, optional, tag = "1")]
pub id: ::core::option::Option<super::super::common::types::Kiid>,
#[prost(message, optional, tag = "2")]
pub position: ::core::option::Option<super::super::common::types::Vector2>,
#[prost(message, optional, tag = "3")]
pub text: ::core::option::Option<Text>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DirectiveLabel {
#[prost(message, optional, tag = "1")]
pub id: ::core::option::Option<super::super::common::types::Kiid>,
#[prost(message, optional, tag = "2")]
pub position: ::core::option::Option<super::super::common::types::Vector2>,
#[prost(message, optional, tag = "3")]
pub text: ::core::option::Option<Text>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum SchematicLayer {
SlUnknown = 0,
}
impl SchematicLayer {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
Self::SlUnknown => "SL_UNKNOWN",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"SL_UNKNOWN" => Some(Self::SlUnknown),
_ => None,
}
}
}

View File

@ -1,38 +1,38 @@
pub(crate) mod kiapi {
#[allow(dead_code)]
pub mod common {
include!(concat!(env!("OUT_DIR"), "/kiapi.common.rs"));
include!("generated/kiapi.common.rs");
pub mod commands {
include!(concat!(env!("OUT_DIR"), "/kiapi.common.commands.rs"));
include!("generated/kiapi.common.commands.rs");
}
pub mod project {
include!(concat!(env!("OUT_DIR"), "/kiapi.common.project.rs"));
include!("generated/kiapi.common.project.rs");
}
pub mod types {
include!(concat!(env!("OUT_DIR"), "/kiapi.common.types.rs"));
include!("generated/kiapi.common.types.rs");
}
}
#[allow(dead_code)]
pub mod board {
include!(concat!(env!("OUT_DIR"), "/kiapi.board.rs"));
include!("generated/kiapi.board.rs");
pub mod commands {
include!(concat!(env!("OUT_DIR"), "/kiapi.board.commands.rs"));
include!("generated/kiapi.board.commands.rs");
}
pub mod types {
include!(concat!(env!("OUT_DIR"), "/kiapi.board.types.rs"));
include!("generated/kiapi.board.types.rs");
}
}
#[allow(dead_code)]
pub mod schematic {
pub mod types {
include!(concat!(env!("OUT_DIR"), "/kiapi.schematic.types.rs"));
include!("generated/kiapi.schematic.types.rs");
}
}
}