Message-plane interface-description codegen¶
This chapter captures the requirements for the message-plane
interface-description codegen toolchain: a layered set of crates that
translates interface descriptions (today, CAN .dbc databases) into
strongly-typed Rust message (de)serializers at build time, with a
no_std, allocation-free, serde-free runtime (de)serialization
path.
The decomposition is the message-plane twin of
Device-driver codegen (the device-plane ESI
toolchain) and CANopen device-driver codegen. Where the
device-plane toolchains describe a device (identity + object dictionary
+ cyclic process image), this toolchain describes a message (the
structs, enums, and request/reply services that cross a channel). The
bounded message-type IR (taktora-idl-core (BB_0117)) is the peer of
fieldbus-od-core:
Top-level umbrella feature — Message-plane interface-des... (FEAT_0110) — peer to Device-driver codegen toolc... (FEAT_0050) (EtherCAT device codegen) and CANopen device-driver codeg... (FEAT_0060) (CANopen device codegen). Build-time only; the only crate that links into a consumer at runtime is the wire runtime (serde-free no_std wire runtime (FEAT_0112)).
Capability-cluster sub-features — one per crate-layer concern, each
:satisfies:Message-plane interface-des... (FEAT_0110).Requirements — concrete shall-clauses that
:satisfies:a capability-cluster feature.
This round delivers the DBC frontend and the CAN/wire backend
end-to-end. OMG IDL and ROS 2 .msg/.srv frontends, and a
J1939-PGN consumer of the generated types, are foreseen but out of scope
this round; the architecture keeps them net-additive (see
Anti-goals and cross-cutting traceability).
The umbrella decomposes into five capability clusters, each on its own
page (see the toctree): the bounded message-type IR (Bounded message-type IR (FEAT_0111)),
the serde-free wire runtime (serde-free no_std wire runtime (FEAT_0112)), the DBC frontend
(DBC frontend (FEAT_0113)), the plane-generic codegen (Plane-generic codegen (FEAT_0114)), and
the CAN/DBC backend (CAN/DBC backend (FEAT_0115)). The deliberately deferred
anti-goals live on Anti-goals and cross-cutting traceability.
Top-level umbrella¶
A layered set of Rust crates that consumes interface descriptions and emits strongly-typed message (de)serializers at build time. The toolchain is organised as layers that depend only leftwards:
The delivered slice is the IR plus the DBC frontend and CAN backend. Additional frontends (OMG IDL, ROS 2) and a J1939 consumer are net-additive follow-ons (see Anti-goals and cross-cutting traceability). |
Requirements at a glance¶
ID |
Title |
Status |
Satisfies |
|---|---|---|---|
Bounded message-type IR |
implemented |
||
serde-free no_std wire runtime |
implemented |
||
DBC frontend |
implemented |
||
Plane-generic codegen |
implemented |
||
CAN/DBC backend |
implemented |
||
NO runtime description parsing |
rejected |
||
Boundedness is unrepresentable to violate |
implemented |
||
Structural validation before sizing |
implemented |
||
Plane-generic, policy-free IR |
implemented |
||
WireType trait surface |
implemented |
||
no_std, allocation-free, serde-free path |
implemented |
||
CAN signal bit-packing primitives |
implemented |
||
DBC parse to a typed model |
implemented |
||
DBC lower to IR plus layout sidecar |
implemented |
||
Deterministic naming policy with collision detection |
implemented |
||
MessageBackend trait and resolve/generate entry point |
implemented |
||
CAN backend emits WireType impls via the wire runtime |
implemented |
||
Build-time generation proof-of-life |
implemented |
||
NO additional frontends this round |
rejected |
||
NO bool or float CAN fields this round |
rejected |
||
NO J1939 application-layer consumer this round |
rejected |