From 9fec2fa0952f91ab4b9a82d12fe520ed109015ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20=C3=96zkan?= Date: Sun, 23 Aug 2026 00:49:25 +0300 Subject: [PATCH] refactor(errors): adopt reportable error terminology --- docs/src/architecture.md | 10 ++-- docs/src/errors.md | 38 +++++++------- docs/src/logs.md | 18 +++---- docs/src/mavlink.md | 4 +- docs/src/reference.md | 4 +- firmware/Cargo.lock | 32 ++++++------ firmware/Cargo.toml | 4 +- .../libs/kaptan-config-mavlink/Cargo.toml | 2 +- .../kaptan-config-mavlink/src/protocol.rs | 2 +- .../src/service/session.rs | 14 ++--- .../libs/kaptan-config-mavlink/src/wire.rs | 2 +- firmware/libs/kaptan-config/Cargo.toml | 2 +- firmware/libs/kaptan-config/src/field.rs | 2 +- firmware/libs/kaptan-config/src/lifecycle.rs | 2 +- firmware/libs/kaptan-config/src/snapshot.rs | 2 +- firmware/libs/kaptan-control/Cargo.toml | 2 +- firmware/libs/kaptan-control/src/lib.rs | 2 +- firmware/libs/kaptan-data-channel/Cargo.toml | 2 +- firmware/libs/kaptan-data-channel/src/lib.rs | 2 +- .../kaptan-diagnostics-mavlink/Cargo.toml | 2 +- .../kaptan-diagnostics-mavlink/src/lib.rs | 18 +++---- firmware/libs/kaptan-drivers/Cargo.toml | 2 +- .../libs/kaptan-drivers/src/icm42688/error.rs | 2 +- .../kaptan-drivers/src/lidar_lite_v3/error.rs | 2 +- .../libs/kaptan-drivers/src/mpu6000/error.rs | 2 +- .../tests/ui/missing_id.rs | 10 ---- .../tests/ui/missing_return.rs | 6 --- .../tests/ui/no_error_report.rs | 18 ------- .../tests/ui/no_error_report.stderr | 17 ------ .../Cargo.toml | 2 +- .../src/lib.rs | 40 +++++++------- .../tests/ui.rs | 0 .../tests/ui/arguments.rs | 2 +- .../tests/ui/arguments.stderr | 2 +- .../tests/ui/const_fn.rs | 2 +- .../tests/ui/const_fn.stderr | 2 +- .../tests/ui/duplicate_id.rs | 4 +- .../tests/ui/duplicate_id.stderr | 0 .../tests/ui/duplicate_id_across_enums.rs | 6 +-- .../tests/ui/duplicate_id_across_enums.stderr | 0 .../tests/ui/enum.rs | 6 +-- .../tests/ui/missing_id.rs | 10 ++++ .../tests/ui/missing_id.stderr | 0 .../tests/ui/missing_return.rs | 6 +++ .../tests/ui/missing_return.stderr | 2 +- .../tests/ui/no_error_report.rs | 18 +++++++ .../tests/ui/no_error_report.stderr | 17 ++++++ .../tests/ui/non_result.rs | 4 +- .../tests/ui/non_result.stderr | 0 .../tests/ui/struct.rs | 2 +- .../tests/ui/struct.stderr | 0 .../tests/ui/union.rs | 2 +- .../tests/ui/union.stderr | 0 .../tests/ui/unsafe_fn.rs | 2 +- .../tests/ui/unsafe_fn.stderr | 2 +- .../tests/ui/zero_id.rs | 4 +- .../tests/ui/zero_id.stderr | 0 .../Cargo.toml | 4 +- .../src/ingress.rs | 4 +- .../src/lib.rs | 19 +++---- .../src/record.rs | 12 ++--- .../src/sink.rs | 6 +-- .../tests/propagate.rs | 52 +++++++++---------- firmware/libs/kaptan-flight-config/Cargo.toml | 2 +- .../libs/kaptan-flight-config/src/cbor.rs | 2 +- firmware/libs/kaptan-math/Cargo.toml | 2 +- firmware/libs/kaptan-math/src/lib.rs | 2 +- firmware/libs/kaptan-mavlink/Cargo.toml | 2 +- .../definitions/kaptan/error.xml | 4 +- .../libs/kaptan-mavlink/src/transmitter.rs | 2 +- firmware/libs/kaptan-navigation/Cargo.toml | 2 +- firmware/libs/kaptan-navigation/src/eskf.rs | 2 +- firmware/libs/kaptan-safety/Cargo.toml | 2 +- firmware/libs/kaptan-safety/src/lib.rs | 2 +- firmware/platforms/stm32f7/Cargo.toml | 2 +- firmware/platforms/stm32f7/src/f722/board.rs | 18 +++---- firmware/platforms/stm32f7/src/f722/clock.rs | 2 +- .../stm32f7/src/f722/peripherals/clock.rs | 2 +- .../stm32f7/src/f722/peripherals/i2c1.rs | 2 +- .../stm32f7/src/f722/peripherals/spi1.rs | 2 +- .../stm32f7/src/f722/peripherals/spi3.rs | 2 +- .../stm32f7/src/f722/peripherals/time.rs | 2 +- .../stm32f7/src/f722/peripherals/usart.rs | 2 +- .../peripherals/usart1_tx_dma2_stream7.rs | 2 +- .../peripherals/usart2_tx_dma1_stream6.rs | 2 +- .../platforms/stm32f7/src/f722/sensors.rs | 2 +- firmware/platforms/stm32f7/src/lib.rs | 2 +- .../stm32f7/tests/platform_safety_boundary.rs | 6 +-- .../tools/configurator/src/serial_worker.rs | 4 +- firmware/tools/sitl/Cargo.toml | 2 +- firmware/tools/sitl/src/config/store.rs | 2 +- firmware/tools/sitl/src/protocol.rs | 2 +- 92 files changed, 270 insertions(+), 269 deletions(-) delete mode 100644 firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_id.rs delete mode 100644 firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_return.rs delete mode 100644 firmware/libs/kaptan-err-propagate-macros/tests/ui/no_error_report.rs delete mode 100644 firmware/libs/kaptan-err-propagate-macros/tests/ui/no_error_report.stderr rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/Cargo.toml (88%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/src/lib.rs (83%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui.rs (100%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/arguments.rs (64%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/arguments.stderr (76%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/const_fn.rs (64%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/const_fn.stderr (54%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/duplicate_id.rs (61%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/duplicate_id.stderr (100%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/duplicate_id_across_enums.rs (81%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/duplicate_id_across_enums.stderr (100%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/enum.rs (87%) create mode 100644 firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_id.rs rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/missing_id.stderr (100%) create mode 100644 firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_return.rs rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/missing_return.stderr (70%) create mode 100644 firmware/libs/kaptan-err-reportable-macros/tests/ui/no_error_report.rs create mode 100644 firmware/libs/kaptan-err-reportable-macros/tests/ui/no_error_report.stderr rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/non_result.rs (63%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/non_result.stderr (100%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/struct.rs (61%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/struct.stderr (100%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/union.rs (60%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/union.stderr (100%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/unsafe_fn.rs (64%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/unsafe_fn.stderr (54%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/zero_id.rs (53%) rename firmware/libs/{kaptan-err-propagate-macros => kaptan-err-reportable-macros}/tests/ui/zero_id.stderr (100%) rename firmware/libs/{kaptan-err-propagate => kaptan-err-reportable}/Cargo.toml (59%) rename firmware/libs/{kaptan-err-propagate => kaptan-err-reportable}/src/ingress.rs (95%) rename firmware/libs/{kaptan-err-propagate => kaptan-err-reportable}/src/lib.rs (54%) rename firmware/libs/{kaptan-err-propagate => kaptan-err-reportable}/src/record.rs (81%) rename firmware/libs/{kaptan-err-propagate => kaptan-err-reportable}/src/sink.rs (91%) rename firmware/libs/{kaptan-err-propagate => kaptan-err-reportable}/tests/propagate.rs (67%) diff --git a/docs/src/architecture.md b/docs/src/architecture.md index 34b95a3..11f2cb3 100644 --- a/docs/src/architecture.md +++ b/docs/src/architecture.md @@ -80,16 +80,16 @@ The build watches every fragment and generates one `message::kaptan` module; fragments are never separately generated Rust modules. `kaptan-log` itself has no MAVLink, platform, time, allocation, or filesystem dependency; its sole configuration coupling is compile-time enum metadata for `LevelFilter`. -`kaptan-err-propagate` independently owns explicitly assigned typed-error identity, -function-boundary propagation, and a bounded nonblocking ingress; it has +`kaptan-err-reportable` independently owns explicitly assigned reportable-error +identity and a bounded nonblocking ingress; it has no logging, MAVLink, platform, filesystem, or clock dependency. Event creation is independent from sink filtering, allowing a future blackbox and MAVLink to -select different policies. The platform drains typed errors before its bounded +select different policies. The platform drains reportable errors before its bounded critical and best-effort log queues and removes a pending record only after TX admission. `KAPTAN_LOG` carries one conventional level plus one bounded text field; `KAPTAN_ERROR` carries an explicitly assigned 16-bit ID and the bounded -`file:line` of the reporting boundary. Its -message kind already identifies a typed firmware error. Heartbeat and safety +`file:line` of the reporting point. Its +message kind already identifies a reportable firmware error. Heartbeat and safety telemetry remain separate from diagnostics. See [Configuration](configuration.md) for the deployment matrix and GCS transaction diff --git a/docs/src/errors.md b/docs/src/errors.md index 3214180..5072edc 100644 --- a/docs/src/errors.md +++ b/docs/src/errors.md @@ -1,9 +1,9 @@ # Errors -Public Kaptan error enums derive the pure `KaptanError` implementation: +Public reportable Kaptan error enums derive `KaptanError`: ```rust -#[derive(Debug, kaptan_err_propagate::KaptanError)] +#[derive(Debug, kaptan_err_reportable::KaptanError)] enum SensorError { #[kaptan_error(id = 12345)] TransferFault, @@ -11,14 +11,14 @@ enum SensorError { UnexpectedIdentity(u8), } -#[kaptan_err_propagate::propagate] +#[kaptan_err_reportable::propagate] fn service_sensor() -> Result<(), SensorError> { read_sensor()?; Ok(()) } ``` -The derive implements `core::error::Error`, `Display`, and `ErrorReport`. It +The derive implements `core::error::Error`, `Display`, and `ReportableError`. It requires a nonzero explicit ID on every variant and retains no type, variant, or module string. `Display` renders the decimal ID. Renaming, moving, or reordering a Rust variant therefore does not change its receiver contract. @@ -26,11 +26,11 @@ Missing and same-enum duplicate IDs are rejected by the derive. Reusing an ID across error enums generates the same reserved linker symbol and fails the final firmware build. -`#[kaptan_err_propagate::propagate]` observes the ordinary `Result` produced -by one terminal diagnostic boundary. If an `Err` leaves that function, the attribute -makes one nonblocking admission attempt and returns the exact same `Err` to the +`#[kaptan_err_reportable::propagate]` turns an annotated function into a +reporting point. If a reportable `Err` leaves that function, the attribute makes +one nonblocking admission attempt and returns the exact same `Err` to the caller. The record contains the final converted error ID and the compile-time -`file:line` of that annotated boundary. This is where the `Err` enters +`file:line` of that reporting point. This is where the `Err` enters diagnostics, not necessarily the line where a deeper callee originally constructed it. `?`, explicit returns, result aliases, and `From` conversion retain their normal Rust behavior. An error handled inside the function is @@ -46,35 +46,35 @@ renaming, moving, or reordering an existing variant keeps its assigned ID. The example numbers above are illustrative and must be replaced with unallocated catalog values when used in production code. -Only the terminal boundary is annotated. If nested functions are both -annotated, each boundary makes its own report attempt; the ingress does not +Only the intended reporting point is annotated. If nested functions are both +annotated, each function makes its own report attempt; the ingress does not mark or mutate error values to deduplicate them. Expected validation, backpressure, retry, and untrusted-input results remain unannotated. In particular, transient SPI/I²C `Busy` and unavailable range measurements stay inside their service retry/idle paths. In contrast, every logging macro—including `kaptan_log::error!`—produces only -`KAPTAN_LOG`. Error propagation is not a replacement for safety state, +`KAPTAN_LOG`. Error reporting is not a replacement for safety state, actuator inhibit, or typed configuration results. -`kaptan-err-propagate` owns error identity and its independent one-slot -ingress. A pending record contains only the compact ID and a static reference -to the propagation boundary's `file:line`. The MAVLink adapter copies that +`kaptan-err-reportable` owns reportable-error identity and its independent +one-slot ingress. A pending record contains only the compact ID and a static +reference to the reporting point's `file:line`. The MAVLink adapter copies that location into its fixed field when constructing `KAPTAN_ERROR`. Producers never encode or transmit MAVLink themselves. Admission is bounded and lossy if a -different typed error is already pending. +different reportable error is already pending. ## What the receiver sees - Configuration writes receive authoritative structured failures through `KAPTAN_CONFIG_RESULT`: operation, lifecycle state, field IDs, validation - rule, and protocol error code. A terminal persistence failure also reports - the storage-only `CommitTransactionError::Store` boundary once as + rule, and protocol error code. A reportable persistence failure also emits + the storage-only `CommitTransactionError::Store` ID once as `KAPTAN_ERROR`; replaying the cached command result does not repeat the error or the flash operation. -- Terminal typed `ErrorReport` faults reach the F722 MAVLink worker as a +- Reported `ReportableError` values reach the F722 MAVLink worker as a `KAPTAN_ERROR`, subject to bounded transport admission. The payload is `{ error_id, raised_at[96] }`. `raised_at` is a zero-padded UTF-8 - `file:line` prefix for the annotated propagation boundary. + `file:line` prefix for the reporting point. The message kind itself identifies an error; no level is duplicated in the payload. Dynamic human-readable context belongs in `KAPTAN_LOG`, while structured protocol failures remain in their owning response message. diff --git a/docs/src/logs.md b/docs/src/logs.md index c7beb73..c9dbd29 100644 --- a/docs/src/logs.md +++ b/docs/src/logs.md @@ -11,18 +11,18 @@ kaptan_log::trace!("prediction step complete"); ``` All five macros emit `KAPTAN_LOG`; their level never selects a different wire -message. When a terminal typed firmware error escapes a reviewed -`#[kaptan_err_propagate::propagate]` function, it makes one bounded admission attempt +message. When a reportable firmware error escapes a reviewed +`#[kaptan_err_reportable::propagate]` function, it makes one bounded admission attempt to the separate `KAPTAN_ERROR` ingress. `kaptan-log` formats each event once into a fixed bounded buffer and never sends MAVLink, allocates, blocks, changes flight state, or touches DMA. The composition fans the event into each enabled sink; the sole MAVLink worker drains its bounded sink queue. Ordinary log text uses one 160-byte bounded -record. Typed-error records contain the explicit ID and a static reference to -the annotated propagation boundary until the MAVLink adapter copies its +record. Reportable-error records contain the explicit ID and a static reference +to the reporting point until the MAVLink adapter copies its `file:line` into the 96-byte `raised_at` field. -Logs and typed errors use independent fixed atomic +Logs and reportable errors use independent fixed atomic ingresses; interrupt and worker producers make one nonblocking admission attempt, and only the MAVLink worker encodes or transmits a retained event. Panic and hard-fault paths still do not attempt live telemetry. @@ -30,7 +30,7 @@ Panic and hard-fault paths still do not attempt live telemetry. ## Receiver contract `definitions/kaptan/log.xml` and `definitions/kaptan/error.xml` separate -ordinary logs and typed errors: +ordinary logs and reportable errors: ```text KAPTAN_LOG { level, flags, message_length, message[160] } @@ -46,12 +46,12 @@ or the complete field when no zero is present. `KAPTAN_LOG.level` accepts only Error (3), Warning (4), Info (6), and Debug (7); Trace is encoded as Debug (7) plus the `TRACE` flag. Other MAVLink severity numbers are not Kaptan log levels. -The `KAPTAN_ERROR` message kind already means a typed firmware error, so it has +The `KAPTAN_ERROR` message kind already means a reportable firmware error, so it has no redundant level or flags field. `error_id` is the stable nonzero catalog number explicitly assigned to the Rust error variant. Renaming or reordering a variant does not change it. -`raised_at` identifies the annotated boundary where the `Err` entered +`raised_at` identifies the reporting point where the `Err` entered diagnostics. Error details requiring machine action stay in their owning protocol, notably `KAPTAN_CONFIG_RESULT`. Delivery is bounded and lossy under link pressure; heartbeat and safety @@ -65,7 +65,7 @@ event. The single restart-only `mavlink.logging.level_filter` field uses the familiar Off, Error, Warn, Info, Debug, and Trace choices. `Info`, for example, accepts Error, Warn, and Info log events. `Off` suppresses `KAPTAN_LOG` on MAVLink -without suppressing typed `KAPTAN_ERROR` reports or events sent to another +without suppressing reportable `KAPTAN_ERROR` events or logs sent to another sink. There is no separate enable flag and no MAVLink-specific set of extra runtime log levels. F722 uses the validated filter recovered at boot, falling back to its board factory when the journal is empty or invalid. diff --git a/docs/src/mavlink.md b/docs/src/mavlink.md index 28a81d3..2c97096 100644 --- a/docs/src/mavlink.md +++ b/docs/src/mavlink.md @@ -50,8 +50,8 @@ log history. The custom Kaptan definitions are aggregated by `definitions/kaptan.xml` from `kaptan/config.xml`, `kaptan/log.xml`, and `kaptan/error.xml`. `KAPTAN_LOG` is an outbound human-readable four-field record. `KAPTAN_ERROR` -is the separate bounded channel for typed firmware errors, carrying a stable -explicit ID plus the `file:line` of its propagation boundary, and needs no +is the separate bounded channel for reportable firmware errors, carrying a +stable explicit ID plus the `file:line` of its reporting point, and needs no redundant level field. Configuration messages back the current target-described web configurator and the future signed GCS. See [Configuration](configuration.md), [Logs](logs.md), and [Errors](errors.md) for diff --git a/docs/src/reference.md b/docs/src/reference.md index 28ce6fe..c04632d 100644 --- a/docs/src/reference.md +++ b/docs/src/reference.md @@ -8,12 +8,12 @@ This page collects stable limits and points to the detailed contracts. | F722 persistence | One bounded fixed scalar snapshot inside each slot of a power-loss-safe two-slot flash journal. | | Config transaction | One owner-bound RAM transaction with typed scalar writes; commit is restart-required. | | Config discovery | Correlated `KAPTAN_CONFIG_INFO_REQUEST` / `KAPTAN_CONFIG_INFO`, then exact-index descriptor/enum-option and field-value requests. | -| Diagnostics | `KAPTAN_LOG` (51020) for macro-produced level/text; `KAPTAN_ERROR` (51021) for a bounded typed `{ error_id, raised_at[96] }` firmware error. | +| Diagnostics | `KAPTAN_LOG` (51020) for macro-produced level/text; `KAPTAN_ERROR` (51021) for a bounded reportable `{ error_id, raised_at[96] }` firmware error. | | F722 configuration | Target-described fields and board factory defaults; the current local transport is a directly wired unsigned UART with motor outputs physically inhibited. | Read [Configuration](configuration.md) for the field/consumer matrix and GCS transaction sequence, [Logs](logs.md) for receiver decoding and filtering, and -[Errors](errors.md) for error propagation and panic scope. +[Errors](errors.md) for reportable errors and panic scope. ## Verification diff --git a/firmware/Cargo.lock b/firmware/Cargo.lock index eaca7fb..26cbf19 100644 --- a/firmware/Cargo.lock +++ b/firmware/Cargo.lock @@ -156,7 +156,7 @@ name = "kaptan-config" version = "0.1.0" dependencies = [ "kaptan-config-derive", - "kaptan-err-propagate", + "kaptan-err-reportable", "kaptan-log", ] @@ -176,7 +176,7 @@ name = "kaptan-config-mavlink" version = "0.1.0" dependencies = [ "kaptan-config", - "kaptan-err-propagate", + "kaptan-err-reportable", "kaptan-mavlink", ] @@ -198,7 +198,7 @@ dependencies = [ name = "kaptan-control" version = "0.1.0" dependencies = [ - "kaptan-err-propagate", + "kaptan-err-reportable", "kaptan-math", ] @@ -207,7 +207,7 @@ name = "kaptan-data-channel" version = "0.1.0" dependencies = [ "kaptan-dma", - "kaptan-err-propagate", + "kaptan-err-reportable", "kaptan-mavlink", "kaptan-sensor", "kaptan-time", @@ -217,7 +217,7 @@ dependencies = [ name = "kaptan-diagnostics-mavlink" version = "0.1.0" dependencies = [ - "kaptan-err-propagate", + "kaptan-err-reportable", "kaptan-log", "kaptan-mavlink", "mavlink", @@ -231,7 +231,7 @@ version = "0.1.0" name = "kaptan-drivers" version = "0.1.0" dependencies = [ - "kaptan-err-propagate", + "kaptan-err-reportable", "kaptan-i2c", "kaptan-sensor", "kaptan-spi", @@ -239,14 +239,14 @@ dependencies = [ ] [[package]] -name = "kaptan-err-propagate" +name = "kaptan-err-reportable" version = "0.1.0" dependencies = [ - "kaptan-err-propagate-macros", + "kaptan-err-reportable-macros", ] [[package]] -name = "kaptan-err-propagate-macros" +name = "kaptan-err-reportable-macros" version = "0.1.0" dependencies = [ "proc-macro2", @@ -260,7 +260,7 @@ name = "kaptan-flight-config" version = "0.1.0" dependencies = [ "kaptan-config", - "kaptan-err-propagate", + "kaptan-err-reportable", "kaptan-log", "minicbor", ] @@ -307,7 +307,7 @@ dependencies = [ name = "kaptan-math" version = "0.1.0" dependencies = [ - "kaptan-err-propagate", + "kaptan-err-reportable", ] [[package]] @@ -316,7 +316,7 @@ version = "0.1.0" dependencies = [ "bitflags", "kaptan-dma", - "kaptan-err-propagate", + "kaptan-err-reportable", "kaptan-sensor", "kaptan-time", "kaptan-tx", @@ -331,7 +331,7 @@ dependencies = [ name = "kaptan-navigation" version = "0.1.0" dependencies = [ - "kaptan-err-propagate", + "kaptan-err-reportable", "kaptan-math", "kaptan-sensor", "kaptan-time", @@ -341,7 +341,7 @@ dependencies = [ name = "kaptan-safety" version = "0.1.0" dependencies = [ - "kaptan-err-propagate", + "kaptan-err-reportable", "kaptan-time", ] @@ -360,7 +360,7 @@ dependencies = [ "kaptan-config-mavlink", "kaptan-control", "kaptan-diagnostics-mavlink", - "kaptan-err-propagate", + "kaptan-err-reportable", "kaptan-flight-config", "kaptan-flight-runtime", "kaptan-log", @@ -509,7 +509,7 @@ dependencies = [ "kaptan-diagnostics-mavlink", "kaptan-dma", "kaptan-drivers", - "kaptan-err-propagate", + "kaptan-err-reportable", "kaptan-i2c", "kaptan-log", "kaptan-mavlink", diff --git a/firmware/Cargo.toml b/firmware/Cargo.toml index ed2aa65..f567383 100644 --- a/firmware/Cargo.toml +++ b/firmware/Cargo.toml @@ -10,8 +10,8 @@ members = [ "libs/kaptan-data-channel", "libs/kaptan-dma", "libs/kaptan-drivers", - "libs/kaptan-err-propagate", - "libs/kaptan-err-propagate-macros", + "libs/kaptan-err-reportable", + "libs/kaptan-err-reportable-macros", "libs/kaptan-flight-config", "libs/kaptan-flight-runtime", "libs/kaptan-i2c", diff --git a/firmware/libs/kaptan-config-mavlink/Cargo.toml b/firmware/libs/kaptan-config-mavlink/Cargo.toml index 38ca220..9bdc36b 100644 --- a/firmware/libs/kaptan-config-mavlink/Cargo.toml +++ b/firmware/libs/kaptan-config-mavlink/Cargo.toml @@ -10,5 +10,5 @@ workspace = true [dependencies] kaptan-config = { path = "../kaptan-config" } -kaptan-err-propagate = { path = "../kaptan-err-propagate" } +kaptan-err-reportable = { path = "../kaptan-err-reportable" } kaptan-mavlink = { path = "../kaptan-mavlink", default-features = false, features = ["dialect-kaptan"] } diff --git a/firmware/libs/kaptan-config-mavlink/src/protocol.rs b/firmware/libs/kaptan-config-mavlink/src/protocol.rs index ccb7c3d..e49472c 100644 --- a/firmware/libs/kaptan-config-mavlink/src/protocol.rs +++ b/firmware/libs/kaptan-config-mavlink/src/protocol.rs @@ -1,7 +1,7 @@ //! Stable typed outcomes for the Kaptan configuration microservice. use kaptan_config::{ConfigState, ConfigViolation, FieldId}; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; /// Operation reported in an authoritative result record. #[derive(Clone, Copy, Debug, Eq, PartialEq)] diff --git a/firmware/libs/kaptan-config-mavlink/src/service/session.rs b/firmware/libs/kaptan-config-mavlink/src/service/session.rs index 068c014..fec1ae2 100644 --- a/firmware/libs/kaptan-config-mavlink/src/service/session.rs +++ b/firmware/libs/kaptan-config-mavlink/src/service/session.rs @@ -23,7 +23,7 @@ pub(super) struct Session { pub(super) revision: u32, } -#[derive(Debug, kaptan_err_propagate::KaptanError)] +#[derive(Debug, kaptan_err_reportable::KaptanError)] enum CommitTransactionError { #[kaptan_error(id = 2201)] Store(E), @@ -337,9 +337,9 @@ impl ConfigProtocol { /// Classifies expected configuration rejection separately from a terminal /// persistence failure. Only the latter leaves this boundary and becomes - /// a typed firmware error; the configuration result remains authoritative + /// a reportable firmware error; the configuration result remains authoritative /// for the requesting user. - #[kaptan_err_propagate::propagate] + #[kaptan_err_reportable::propagate] fn commit_transaction( &mut self, manager: &mut ConfigManager, @@ -1235,7 +1235,7 @@ mod tests { #[test] fn failed_commit_reports_the_returned_error_only_once() { - while kaptan_err_propagate::take().is_some() {} + while kaptan_err_reportable::take().is_some() {} let persists = Rc::new(Cell::new(0)); let store = FailingStore(Rc::clone(&persists)); let mut manager = ConfigManager::new(Candidate(2), (), store).unwrap(); @@ -1277,9 +1277,9 @@ mod tests { Some(ProtocolError::StorageFailure) ); let error = - kaptan_err_propagate::take().expect("failed commit must report its returned error"); + kaptan_err_reportable::take().expect("failed commit must report its returned error"); assert_eq!(error.id(), 2201); - while kaptan_err_propagate::take().is_some() {} + while kaptan_err_reportable::take().is_some() {} protocol .dispatch(&mut manager, Authorized::host(7, commit), |_| { @@ -1288,7 +1288,7 @@ mod tests { .unwrap(); assert_eq!(persists.get(), 1); assert!( - kaptan_err_propagate::take().is_none(), + kaptan_err_reportable::take().is_none(), "a cached command replay must not report the error again" ); } diff --git a/firmware/libs/kaptan-config-mavlink/src/wire.rs b/firmware/libs/kaptan-config-mavlink/src/wire.rs index da8fb50..b0a097f 100644 --- a/firmware/libs/kaptan-config-mavlink/src/wire.rs +++ b/firmware/libs/kaptan-config-mavlink/src/wire.rs @@ -3,7 +3,7 @@ use kaptan_config::{ ConfigState, ConfigValue, FieldDescriptor, FieldId, ValidationRule, ValueKind, }; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use kaptan_mavlink::message::Message; use kaptan_mavlink::message::kaptan::{ KAPTAN_CONFIG_DESCRIPTOR_DATA, KAPTAN_CONFIG_ENUM_OPTION_DATA, KAPTAN_CONFIG_INFO_DATA, diff --git a/firmware/libs/kaptan-config/Cargo.toml b/firmware/libs/kaptan-config/Cargo.toml index 6727dc6..e9fd553 100644 --- a/firmware/libs/kaptan-config/Cargo.toml +++ b/firmware/libs/kaptan-config/Cargo.toml @@ -10,5 +10,5 @@ workspace = true [dependencies] kaptan-config-derive = { path = "../kaptan-config-derive" } -kaptan-err-propagate = { path = "../kaptan-err-propagate" } +kaptan-err-reportable = { path = "../kaptan-err-reportable" } kaptan-log = { path = "../kaptan-log" } diff --git a/firmware/libs/kaptan-config/src/field.rs b/firmware/libs/kaptan-config/src/field.rs index 90d0314..822e7d3 100644 --- a/firmware/libs/kaptan-config/src/field.rs +++ b/firmware/libs/kaptan-config/src/field.rs @@ -1,7 +1,7 @@ //! Transport-neutral typed configuration fields and descriptors. use crate::{ConfigViolation, ValidationRule}; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; /// Maximum choices representable by one enum-backed field. /// diff --git a/firmware/libs/kaptan-config/src/lifecycle.rs b/firmware/libs/kaptan-config/src/lifecycle.rs index d8baa4c..bc05537 100644 --- a/firmware/libs/kaptan-config/src/lifecycle.rs +++ b/firmware/libs/kaptan-config/src/lifecycle.rs @@ -4,7 +4,7 @@ use crate::{ ConfigModel, ConfigStore, ConfigValue, ConfigViolation, FieldDescriptor, FieldId, FieldWriteError, }; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; /// Observable state of the bounded configuration transaction slot. #[derive(Clone, Copy, Debug, Eq, PartialEq)] diff --git a/firmware/libs/kaptan-config/src/snapshot.rs b/firmware/libs/kaptan-config/src/snapshot.rs index b51ca87..360734e 100644 --- a/firmware/libs/kaptan-config/src/snapshot.rs +++ b/firmware/libs/kaptan-config/src/snapshot.rs @@ -16,7 +16,7 @@ //! field IDs and therefore also accepts a complete, uniquely identified set in //! another order. -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use crate::{ConfigModel, ConfigValue, FieldId, FieldWriteError, ValueKind}; diff --git a/firmware/libs/kaptan-control/Cargo.toml b/firmware/libs/kaptan-control/Cargo.toml index 253e86a..ded76c1 100644 --- a/firmware/libs/kaptan-control/Cargo.toml +++ b/firmware/libs/kaptan-control/Cargo.toml @@ -9,5 +9,5 @@ version.workspace = true workspace = true [dependencies] -kaptan-err-propagate = { path = "../kaptan-err-propagate" } +kaptan-err-reportable = { path = "../kaptan-err-reportable" } kaptan-math = { path = "../kaptan-math" } diff --git a/firmware/libs/kaptan-control/src/lib.rs b/firmware/libs/kaptan-control/src/lib.rs index 29ff24a..df4ba78 100644 --- a/firmware/libs/kaptan-control/src/lib.rs +++ b/firmware/libs/kaptan-control/src/lib.rs @@ -7,7 +7,7 @@ #![no_std] -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use kaptan_math::{Frd, Ned, UnitQuaternion, Vector3, sqrt}; /// Body-frame angular rate in radians per second. diff --git a/firmware/libs/kaptan-data-channel/Cargo.toml b/firmware/libs/kaptan-data-channel/Cargo.toml index 98d6dc1..fefeb56 100644 --- a/firmware/libs/kaptan-data-channel/Cargo.toml +++ b/firmware/libs/kaptan-data-channel/Cargo.toml @@ -9,7 +9,7 @@ version.workspace = true workspace = true [dependencies] -kaptan-err-propagate = { path = "../kaptan-err-propagate" } +kaptan-err-reportable = { path = "../kaptan-err-reportable" } kaptan-dma = { path = "../kaptan-dma" } kaptan-mavlink = { path = "../kaptan-mavlink" } kaptan-sensor = { path = "../kaptan-sensor" } diff --git a/firmware/libs/kaptan-data-channel/src/lib.rs b/firmware/libs/kaptan-data-channel/src/lib.rs index a40f27e..30f7522 100644 --- a/firmware/libs/kaptan-data-channel/src/lib.rs +++ b/firmware/libs/kaptan-data-channel/src/lib.rs @@ -8,7 +8,7 @@ #![no_std] use kaptan_dma::TxCompletion; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use kaptan_mavlink::message::MessageData; use kaptan_mavlink::{ MavlinkFrame, diff --git a/firmware/libs/kaptan-diagnostics-mavlink/Cargo.toml b/firmware/libs/kaptan-diagnostics-mavlink/Cargo.toml index 28d5662..a897cc2 100644 --- a/firmware/libs/kaptan-diagnostics-mavlink/Cargo.toml +++ b/firmware/libs/kaptan-diagnostics-mavlink/Cargo.toml @@ -9,7 +9,7 @@ version.workspace = true workspace = true [dependencies] -kaptan-err-propagate = { path = "../kaptan-err-propagate" } +kaptan-err-reportable = { path = "../kaptan-err-reportable" } kaptan-log = { path = "../kaptan-log" } kaptan-mavlink = { path = "../kaptan-mavlink", default-features = false, features = ["dialect-kaptan"] } diff --git a/firmware/libs/kaptan-diagnostics-mavlink/src/lib.rs b/firmware/libs/kaptan-diagnostics-mavlink/src/lib.rs index 9f7b43e..3c2a0c7 100644 --- a/firmware/libs/kaptan-diagnostics-mavlink/src/lib.rs +++ b/firmware/libs/kaptan-diagnostics-mavlink/src/lib.rs @@ -1,4 +1,4 @@ -//! MAVLink projection for Kaptan logs and typed firmware errors. +//! MAVLink projection for Kaptan logs and reportable firmware errors. //! //! This adapter creates generated payload data only. A platform-owned link is //! solely responsible for MAVLink framing, bounded admission, DMA, and retry @@ -9,7 +9,7 @@ #[cfg(test)] extern crate std; -use kaptan_err_propagate::ErrorRecord; +use kaptan_err_reportable::ErrorRecord; use kaptan_log::{Level, LogRecord, MAXIMUM_LOG_TEXT_BYTES}; use kaptan_mavlink::message::kaptan::{KAPTAN_ERROR_DATA, KAPTAN_LOG_DATA, KaptanLogFlags}; @@ -32,7 +32,7 @@ pub fn encode_log(record: &LogRecord) -> KAPTAN_LOG_DATA { } } -/// Encodes one typed firmware error as its sole wire message. +/// Encodes one reportable firmware error as its sole wire message. pub fn encode_error(record: &ErrorRecord) -> KAPTAN_ERROR_DATA { let source = record.raised_at().as_bytes(); let mut length = source.len().min(ERROR_RAISED_AT_BYTES); @@ -63,7 +63,7 @@ const fn mavlink_severity(level: Level) -> u8 { #[cfg(test)] mod tests { use super::{LOG_MESSAGE_BYTES, encode_error, encode_log}; - use kaptan_err_propagate::KaptanError; + use kaptan_err_reportable::KaptanError; use kaptan_log::{Level, LogFlags, LogRecord, LogText}; use kaptan_mavlink::{ MavlinkVersion, @@ -80,8 +80,8 @@ mod tests { Transfer, } - #[kaptan_err_propagate::propagate] - fn report_typed_error() -> Result<(), TestError> { + #[kaptan_err_reportable::propagate] + fn report_reportable_error() -> Result<(), TestError> { Err(TestError::Transfer) } @@ -148,9 +148,9 @@ mod tests { Ok(MavMessage::KAPTAN_LOG(decoded)) if decoded == data )); - while kaptan_err_propagate::take().is_some() {} - assert_eq!(report_typed_error(), Err(TestError::Transfer)); - let error = kaptan_err_propagate::take().expect("typed error retained"); + while kaptan_err_reportable::take().is_some() {} + assert_eq!(report_reportable_error(), Err(TestError::Transfer)); + let error = kaptan_err_reportable::take().expect("reportable error retained"); let error_data = encode_error(&error); assert_eq!(error_data.error_id, error.id()); assert_eq!(KAPTAN_ERROR_DATA::ENCODED_LEN, 98); diff --git a/firmware/libs/kaptan-drivers/Cargo.toml b/firmware/libs/kaptan-drivers/Cargo.toml index 9ebcc36..02b8647 100644 --- a/firmware/libs/kaptan-drivers/Cargo.toml +++ b/firmware/libs/kaptan-drivers/Cargo.toml @@ -9,7 +9,7 @@ version.workspace = true workspace = true [dependencies] -kaptan-err-propagate = { path = "../kaptan-err-propagate" } +kaptan-err-reportable = { path = "../kaptan-err-reportable" } kaptan-sensor = { path = "../kaptan-sensor" } kaptan-i2c = { path = "../kaptan-i2c" } kaptan-spi = { path = "../kaptan-spi" } diff --git a/firmware/libs/kaptan-drivers/src/icm42688/error.rs b/firmware/libs/kaptan-drivers/src/icm42688/error.rs index 161ca2c..5f15a17 100644 --- a/firmware/libs/kaptan-drivers/src/icm42688/error.rs +++ b/firmware/libs/kaptan-drivers/src/icm42688/error.rs @@ -1,6 +1,6 @@ //! ICM-42688-P operation errors. -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; /// ICM-42688-P operation failure. #[derive(Debug, Eq, PartialEq, KaptanError)] diff --git a/firmware/libs/kaptan-drivers/src/lidar_lite_v3/error.rs b/firmware/libs/kaptan-drivers/src/lidar_lite_v3/error.rs index feb9e4c..166ca27 100644 --- a/firmware/libs/kaptan-drivers/src/lidar_lite_v3/error.rs +++ b/firmware/libs/kaptan-drivers/src/lidar_lite_v3/error.rs @@ -1,6 +1,6 @@ //! LIDAR-Lite v3 operation errors. -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; /// LIDAR-Lite v3 operation failure. #[derive(Debug, Eq, PartialEq, KaptanError)] diff --git a/firmware/libs/kaptan-drivers/src/mpu6000/error.rs b/firmware/libs/kaptan-drivers/src/mpu6000/error.rs index 20a3da5..6516954 100644 --- a/firmware/libs/kaptan-drivers/src/mpu6000/error.rs +++ b/firmware/libs/kaptan-drivers/src/mpu6000/error.rs @@ -1,6 +1,6 @@ //! MPU6000 operation errors. -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; /// MPU6000 operation failure. #[derive(Debug, Eq, PartialEq, KaptanError)] diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_id.rs b/firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_id.rs deleted file mode 100644 index 1aae879..0000000 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_id.rs +++ /dev/null @@ -1,10 +0,0 @@ -extern crate self as kaptan_err_propagate; - -use kaptan_err_propagate_macros::KaptanError; - -#[derive(Debug, KaptanError)] -enum MissingId { - Variant, -} - -fn main() {} diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_return.rs b/firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_return.rs deleted file mode 100644 index 411a256..0000000 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_return.rs +++ /dev/null @@ -1,6 +0,0 @@ -use kaptan_err_propagate_macros::propagate; - -#[propagate] -fn invalid() {} - -fn main() {} diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/no_error_report.rs b/firmware/libs/kaptan-err-propagate-macros/tests/ui/no_error_report.rs deleted file mode 100644 index 399a557..0000000 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/no_error_report.rs +++ /dev/null @@ -1,18 +0,0 @@ -use kaptan_err_propagate_macros::propagate; - -extern crate self as kaptan_err_propagate; - -pub trait ErrorReport {} - -pub mod __private { - pub fn report_result(_: &Result, _: &'static str) {} -} - -struct PlainError; - -#[propagate] -fn invalid() -> Result<(), PlainError> { - Err(PlainError) -} - -fn main() {} diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/no_error_report.stderr b/firmware/libs/kaptan-err-propagate-macros/tests/ui/no_error_report.stderr deleted file mode 100644 index 2d3c053..0000000 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/no_error_report.stderr +++ /dev/null @@ -1,17 +0,0 @@ -error[E0277]: the trait bound `PlainError: ErrorReport` is not satisfied - --> tests/ui/no_error_report.rs:13:1 - | -13 | #[propagate] - | ^^^^^^^^^^^^ the trait `ErrorReport` is not implemented for `PlainError` - | -help: this trait has no implementations, consider adding one - --> tests/ui/no_error_report.rs:5:1 - | - 5 | pub trait ErrorReport {} - | ^^^^^^^^^^^^^^^^^^^^^ -note: required by a bound in `report_result` - --> tests/ui/no_error_report.rs:8:32 - | - 8 | pub fn report_result(_: &Result, _: &'static str) {} - | ^^^^^^^^^^^^^^^^^^ required by this bound in `report_result` - = note: this error originates in the attribute macro `propagate` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/firmware/libs/kaptan-err-propagate-macros/Cargo.toml b/firmware/libs/kaptan-err-reportable-macros/Cargo.toml similarity index 88% rename from firmware/libs/kaptan-err-propagate-macros/Cargo.toml rename to firmware/libs/kaptan-err-reportable-macros/Cargo.toml index ca72730..af6d0f1 100644 --- a/firmware/libs/kaptan-err-propagate-macros/Cargo.toml +++ b/firmware/libs/kaptan-err-reportable-macros/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "kaptan-err-propagate-macros" +name = "kaptan-err-reportable-macros" edition.workspace = true license.workspace = true rust-version.workspace = true diff --git a/firmware/libs/kaptan-err-propagate-macros/src/lib.rs b/firmware/libs/kaptan-err-reportable-macros/src/lib.rs similarity index 83% rename from firmware/libs/kaptan-err-propagate-macros/src/lib.rs rename to firmware/libs/kaptan-err-reportable-macros/src/lib.rs index c4e2f4a..02dd7e1 100644 --- a/firmware/libs/kaptan-err-propagate-macros/src/lib.rs +++ b/firmware/libs/kaptan-err-reportable-macros/src/lib.rs @@ -1,4 +1,4 @@ -//! Attribute expansion for `kaptan-err-propagate`. +//! Attribute expansion for `kaptan-err-reportable`. use proc_macro::TokenStream; use quote::{format_ident, quote}; @@ -8,7 +8,7 @@ use syn::{ parse_quote, spanned::Spanned, }; -/// Implements `kaptan_err_propagate::ErrorReport`, [`core::fmt::Display`], and +/// Implements `kaptan_err_reportable::ReportableError`, [`core::fmt::Display`], and /// [`core::error::Error`] for an explicitly numbered error enum. /// /// Every variant must declare a stable nonzero @@ -34,7 +34,7 @@ pub fn propagate(arguments: TokenStream, input: TokenStream) -> TokenStream { if !arguments.is_empty() { return Error::new( proc_macro2::Span::call_site(), - "kaptan_err_propagate::propagate does not accept arguments", + "kaptan_err_reportable::propagate does not accept arguments", ) .into_compile_error() .into(); @@ -53,22 +53,22 @@ fn expand(mut function: ItemFn) -> syn::Result { function.block = if function.sig.asyncness.is_some() { Box::new(syn::parse_quote!({ const __KAPTAN_RAISED_AT: &str = concat!(file!(), ":", line!()); - let __kaptan_err_propagate_result = (async #body).await; - ::kaptan_err_propagate::__private::report_result( - &__kaptan_err_propagate_result, + let __kaptan_err_reportable_result = (async #body).await; + ::kaptan_err_reportable::__private::report_result( + &__kaptan_err_reportable_result, __KAPTAN_RAISED_AT, ); - __kaptan_err_propagate_result + __kaptan_err_reportable_result })) } else { Box::new(syn::parse_quote!({ const __KAPTAN_RAISED_AT: &str = concat!(file!(), ":", line!()); - let __kaptan_err_propagate_result = (|| #body)(); - ::kaptan_err_propagate::__private::report_result( - &__kaptan_err_propagate_result, + let __kaptan_err_reportable_result = (|| #body)(); + ::kaptan_err_reportable::__private::report_result( + &__kaptan_err_reportable_result, __KAPTAN_RAISED_AT, ); - __kaptan_err_propagate_result + __kaptan_err_reportable_result })) }; @@ -80,32 +80,32 @@ fn validate_signature(function: &ItemFn) -> syn::Result<()> { if let Some(token) = signature.constness { return Err(Error::new( token.span(), - "kaptan_err_propagate::propagate does not support const functions", + "kaptan_err_reportable::propagate does not support const functions", )); } if let Some(token) = signature.unsafety { return Err(Error::new( token.span(), - "kaptan_err_propagate::propagate does not support unsafe functions", + "kaptan_err_reportable::propagate does not support unsafe functions", )); } if let Some(abi) = &signature.abi { return Err(Error::new( abi.span(), - "kaptan_err_propagate::propagate does not support foreign-ABI functions", + "kaptan_err_reportable::propagate does not support foreign-ABI functions", )); } if let Some(variadic) = &signature.variadic { return Err(Error::new( variadic.span(), - "kaptan_err_propagate::propagate does not support variadic functions", + "kaptan_err_reportable::propagate does not support variadic functions", )); } if matches!(signature.output, ReturnType::Default) { return Err(Error::new( signature.output.span(), - "kaptan_err_propagate::propagate requires an explicit Result return type", + "kaptan_err_reportable::propagate requires an explicit Result return type", )); } Ok(()) @@ -168,7 +168,7 @@ fn expand_error(input: DeriveInput) -> syn::Result { Fields::Named(_) => quote!(Self::#variant_ident { .. }), }; quote! { - #pattern => ::kaptan_err_propagate::ErrorId::new(#id) + #pattern => ::kaptan_err_reportable::ErrorId::new(#id) } }); let (impl_generics, type_generics, where_clause) = generics.split_for_impl(); @@ -183,8 +183,8 @@ fn expand_error(input: DeriveInput) -> syn::Result { Ok(quote! { #(#identities)* - impl #impl_generics ::kaptan_err_propagate::ErrorReport for #ident #type_generics #where_clause { - fn error_id(&self) -> ::kaptan_err_propagate::ErrorId { + impl #impl_generics ::kaptan_err_reportable::ReportableError for #ident #type_generics #where_clause { + fn error_id(&self) -> ::kaptan_err_reportable::ErrorId { match self { #(#arms),* } @@ -197,7 +197,7 @@ fn expand_error(input: DeriveInput) -> syn::Result { formatter: &mut ::core::fmt::Formatter<'_>, ) -> ::core::fmt::Result { ::core::fmt::Display::fmt( - &::error_id(self).get(), + &::error_id(self).get(), formatter, ) } diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui.rs similarity index 100% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui.rs rename to firmware/libs/kaptan-err-reportable-macros/tests/ui.rs diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/arguments.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/arguments.rs similarity index 64% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/arguments.rs rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/arguments.rs index bb837f2..6dbbbaa 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/arguments.rs +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/arguments.rs @@ -1,4 +1,4 @@ -use kaptan_err_propagate_macros::propagate; +use kaptan_err_reportable_macros::propagate; #[propagate(report)] fn invalid() -> Result<(), ()> { diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/arguments.stderr b/firmware/libs/kaptan-err-reportable-macros/tests/ui/arguments.stderr similarity index 76% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/arguments.stderr rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/arguments.stderr index 9d2e06d..d8e9835 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/arguments.stderr +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/arguments.stderr @@ -1,4 +1,4 @@ -error: kaptan_err_propagate::propagate does not accept arguments +error: kaptan_err_reportable::propagate does not accept arguments --> tests/ui/arguments.rs:3:1 | 3 | #[propagate(report)] diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/const_fn.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/const_fn.rs similarity index 64% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/const_fn.rs rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/const_fn.rs index 6e6a41f..f4164a6 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/const_fn.rs +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/const_fn.rs @@ -1,4 +1,4 @@ -use kaptan_err_propagate_macros::propagate; +use kaptan_err_reportable_macros::propagate; #[propagate] const fn invalid() -> Result<(), ()> { diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/const_fn.stderr b/firmware/libs/kaptan-err-reportable-macros/tests/ui/const_fn.stderr similarity index 54% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/const_fn.stderr rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/const_fn.stderr index fb9c246..2f87114 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/const_fn.stderr +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/const_fn.stderr @@ -1,4 +1,4 @@ -error: kaptan_err_propagate::propagate does not support const functions +error: kaptan_err_reportable::propagate does not support const functions --> tests/ui/const_fn.rs:4:1 | 4 | const fn invalid() -> Result<(), ()> { diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/duplicate_id.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/duplicate_id.rs similarity index 61% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/duplicate_id.rs rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/duplicate_id.rs index 1578e47..c16bd4b 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/duplicate_id.rs +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/duplicate_id.rs @@ -1,6 +1,6 @@ -extern crate self as kaptan_err_propagate; +extern crate self as kaptan_err_reportable; -use kaptan_err_propagate_macros::KaptanError; +use kaptan_err_reportable_macros::KaptanError; #[derive(Debug, KaptanError)] enum DuplicateId { diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/duplicate_id.stderr b/firmware/libs/kaptan-err-reportable-macros/tests/ui/duplicate_id.stderr similarity index 100% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/duplicate_id.stderr rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/duplicate_id.stderr diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/duplicate_id_across_enums.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/duplicate_id_across_enums.rs similarity index 81% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/duplicate_id_across_enums.rs rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/duplicate_id_across_enums.rs index 597f0c1..578b772 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/duplicate_id_across_enums.rs +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/duplicate_id_across_enums.rs @@ -1,6 +1,6 @@ -extern crate self as kaptan_err_propagate; +extern crate self as kaptan_err_reportable; -use kaptan_err_propagate_macros::KaptanError; +use kaptan_err_reportable_macros::KaptanError; #[derive(Clone, Copy)] pub struct ErrorId(u16); @@ -15,7 +15,7 @@ impl ErrorId { } } -pub trait ErrorReport { +pub trait ReportableError { fn error_id(&self) -> ErrorId; } diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/duplicate_id_across_enums.stderr b/firmware/libs/kaptan-err-reportable-macros/tests/ui/duplicate_id_across_enums.stderr similarity index 100% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/duplicate_id_across_enums.stderr rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/duplicate_id_across_enums.stderr diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/enum.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/enum.rs similarity index 87% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/enum.rs rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/enum.rs index c4a9218..89b9f09 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/enum.rs +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/enum.rs @@ -1,6 +1,6 @@ -extern crate self as kaptan_err_propagate; +extern crate self as kaptan_err_reportable; -use kaptan_err_propagate_macros::KaptanError; +use kaptan_err_reportable_macros::KaptanError; #[derive(Clone, Copy)] pub struct ErrorId(u16); @@ -15,7 +15,7 @@ impl ErrorId { } } -pub trait ErrorReport { +pub trait ReportableError { fn error_id(&self) -> ErrorId; } diff --git a/firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_id.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_id.rs new file mode 100644 index 0000000..e1545df --- /dev/null +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_id.rs @@ -0,0 +1,10 @@ +extern crate self as kaptan_err_reportable; + +use kaptan_err_reportable_macros::KaptanError; + +#[derive(Debug, KaptanError)] +enum MissingId { + Variant, +} + +fn main() {} diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_id.stderr b/firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_id.stderr similarity index 100% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_id.stderr rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_id.stderr diff --git a/firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_return.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_return.rs new file mode 100644 index 0000000..b43644d --- /dev/null +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_return.rs @@ -0,0 +1,6 @@ +use kaptan_err_reportable_macros::propagate; + +#[propagate] +fn invalid() {} + +fn main() {} diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_return.stderr b/firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_return.stderr similarity index 70% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_return.stderr rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_return.stderr index 40f29e9..719b9f2 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/missing_return.stderr +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/missing_return.stderr @@ -1,4 +1,4 @@ -error: kaptan_err_propagate::propagate requires an explicit Result return type +error: kaptan_err_reportable::propagate requires an explicit Result return type --> tests/ui/missing_return.rs:3:1 | 3 | #[propagate] diff --git a/firmware/libs/kaptan-err-reportable-macros/tests/ui/no_error_report.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/no_error_report.rs new file mode 100644 index 0000000..0683789 --- /dev/null +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/no_error_report.rs @@ -0,0 +1,18 @@ +use kaptan_err_reportable_macros::propagate; + +extern crate self as kaptan_err_reportable; + +pub trait ReportableError {} + +pub mod __private { + pub fn report_result(_: &Result, _: &'static str) {} +} + +struct PlainError; + +#[propagate] +fn invalid() -> Result<(), PlainError> { + Err(PlainError) +} + +fn main() {} diff --git a/firmware/libs/kaptan-err-reportable-macros/tests/ui/no_error_report.stderr b/firmware/libs/kaptan-err-reportable-macros/tests/ui/no_error_report.stderr new file mode 100644 index 0000000..68fd0e4 --- /dev/null +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/no_error_report.stderr @@ -0,0 +1,17 @@ +error[E0277]: the trait bound `PlainError: ReportableError` is not satisfied + --> tests/ui/no_error_report.rs:13:1 + | +13 | #[propagate] + | ^^^^^^^^^^^^ the trait `ReportableError` is not implemented for `PlainError` + | +help: this trait has no implementations, consider adding one + --> tests/ui/no_error_report.rs:5:1 + | + 5 | pub trait ReportableError {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^ +note: required by a bound in `report_result` + --> tests/ui/no_error_report.rs:8:32 + | + 8 | pub fn report_result(_: &Result, _: &'static str) {} + | ^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `report_result` + = note: this error originates in the attribute macro `propagate` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/non_result.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/non_result.rs similarity index 63% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/non_result.rs rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/non_result.rs index 2a0db36..9587b61 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/non_result.rs +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/non_result.rs @@ -1,6 +1,6 @@ -use kaptan_err_propagate_macros::propagate; +use kaptan_err_reportable_macros::propagate; -extern crate self as kaptan_err_propagate; +extern crate self as kaptan_err_reportable; pub mod __private { pub fn report_result(_: &Result, _: &'static str) {} diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/non_result.stderr b/firmware/libs/kaptan-err-reportable-macros/tests/ui/non_result.stderr similarity index 100% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/non_result.stderr rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/non_result.stderr diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/struct.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/struct.rs similarity index 61% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/struct.rs rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/struct.rs index 79c7587..72ec4fd 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/struct.rs +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/struct.rs @@ -1,4 +1,4 @@ -use kaptan_err_propagate_macros::KaptanError; +use kaptan_err_reportable_macros::KaptanError; #[derive(KaptanError)] struct NotAnError { diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/struct.stderr b/firmware/libs/kaptan-err-reportable-macros/tests/ui/struct.stderr similarity index 100% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/struct.stderr rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/struct.stderr diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/union.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/union.rs similarity index 60% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/union.rs rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/union.rs index fb5a7c9..f15eef9 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/union.rs +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/union.rs @@ -1,4 +1,4 @@ -use kaptan_err_propagate_macros::KaptanError; +use kaptan_err_reportable_macros::KaptanError; #[derive(KaptanError)] union NotAnError { diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/union.stderr b/firmware/libs/kaptan-err-reportable-macros/tests/ui/union.stderr similarity index 100% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/union.stderr rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/union.stderr diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/unsafe_fn.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/unsafe_fn.rs similarity index 64% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/unsafe_fn.rs rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/unsafe_fn.rs index 0c75a53..2376d51 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/unsafe_fn.rs +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/unsafe_fn.rs @@ -1,4 +1,4 @@ -use kaptan_err_propagate_macros::propagate; +use kaptan_err_reportable_macros::propagate; #[propagate] unsafe fn invalid() -> Result<(), ()> { diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/unsafe_fn.stderr b/firmware/libs/kaptan-err-reportable-macros/tests/ui/unsafe_fn.stderr similarity index 54% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/unsafe_fn.stderr rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/unsafe_fn.stderr index 96e74cf..d53525e 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/unsafe_fn.stderr +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/unsafe_fn.stderr @@ -1,4 +1,4 @@ -error: kaptan_err_propagate::propagate does not support unsafe functions +error: kaptan_err_reportable::propagate does not support unsafe functions --> tests/ui/unsafe_fn.rs:4:1 | 4 | unsafe fn invalid() -> Result<(), ()> { diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/zero_id.rs b/firmware/libs/kaptan-err-reportable-macros/tests/ui/zero_id.rs similarity index 53% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/zero_id.rs rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/zero_id.rs index 98ad048..5f31658 100644 --- a/firmware/libs/kaptan-err-propagate-macros/tests/ui/zero_id.rs +++ b/firmware/libs/kaptan-err-reportable-macros/tests/ui/zero_id.rs @@ -1,6 +1,6 @@ -extern crate self as kaptan_err_propagate; +extern crate self as kaptan_err_reportable; -use kaptan_err_propagate_macros::KaptanError; +use kaptan_err_reportable_macros::KaptanError; #[derive(Debug, KaptanError)] enum ZeroId { diff --git a/firmware/libs/kaptan-err-propagate-macros/tests/ui/zero_id.stderr b/firmware/libs/kaptan-err-reportable-macros/tests/ui/zero_id.stderr similarity index 100% rename from firmware/libs/kaptan-err-propagate-macros/tests/ui/zero_id.stderr rename to firmware/libs/kaptan-err-reportable-macros/tests/ui/zero_id.stderr diff --git a/firmware/libs/kaptan-err-propagate/Cargo.toml b/firmware/libs/kaptan-err-reportable/Cargo.toml similarity index 59% rename from firmware/libs/kaptan-err-propagate/Cargo.toml rename to firmware/libs/kaptan-err-reportable/Cargo.toml index 517f9a0..f0a638f 100644 --- a/firmware/libs/kaptan-err-propagate/Cargo.toml +++ b/firmware/libs/kaptan-err-reportable/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "kaptan-err-propagate" +name = "kaptan-err-reportable" edition.workspace = true license.workspace = true rust-version.workspace = true @@ -9,4 +9,4 @@ version.workspace = true workspace = true [dependencies] -kaptan-err-propagate-macros = { path = "../kaptan-err-propagate-macros" } +kaptan-err-reportable-macros = { path = "../kaptan-err-reportable-macros" } diff --git a/firmware/libs/kaptan-err-propagate/src/ingress.rs b/firmware/libs/kaptan-err-reportable/src/ingress.rs similarity index 95% rename from firmware/libs/kaptan-err-propagate/src/ingress.rs rename to firmware/libs/kaptan-err-reportable/src/ingress.rs index d1ea8f5..96dee10 100644 --- a/firmware/libs/kaptan-err-propagate/src/ingress.rs +++ b/firmware/libs/kaptan-err-reportable/src/ingress.rs @@ -1,4 +1,4 @@ -//! Fixed, allocation-free typed-error ingress. +//! Fixed, allocation-free reportable-error ingress. use core::{ cell::UnsafeCell, @@ -68,7 +68,7 @@ pub(crate) fn publish(id: ErrorId, raised_at: &'static str) { GLOBAL_INGRESS.publish(id, raised_at); } -/// Takes the pending typed firmware error, if one exists. +/// Takes the pending reportable firmware error, if one exists. pub fn take() -> Option { GLOBAL_INGRESS.take() } diff --git a/firmware/libs/kaptan-err-propagate/src/lib.rs b/firmware/libs/kaptan-err-reportable/src/lib.rs similarity index 54% rename from firmware/libs/kaptan-err-propagate/src/lib.rs rename to firmware/libs/kaptan-err-reportable/src/lib.rs index 82c5a9d..475e0ba 100644 --- a/firmware/libs/kaptan-err-propagate/src/lib.rs +++ b/firmware/libs/kaptan-err-reportable/src/lib.rs @@ -1,12 +1,13 @@ -//! Bounded typed firmware errors and function-boundary propagation. +//! Stable reportable firmware errors with bounded diagnostic ingress. //! //! This crate owns error identity and ingress. It contains no logging levels, //! filtering, MAVLink, board, filesystem, or clock dependency. //! -//! `#[propagate]` reports at each annotated boundary. Annotate the terminal -//! boundary where an error enters diagnostics; nested annotated callers would -//! attempt to report the same propagation again. The bounded ingress retaining -//! only one pending error is backpressure, not semantic duplicate suppression. +//! `#[propagate]` turns an annotated function into a reporting point. When a +//! reportable error leaves that function, the macro makes one reporting +//! attempt. Nested annotated callers would therefore attempt to report the +//! same error again. The bounded ingress retaining only one pending error is +//! backpressure, not semantic duplicate suppression. #![no_std] @@ -18,19 +19,19 @@ mod record; mod sink; pub use ingress::take; -pub use kaptan_err_propagate_macros::{KaptanError, propagate}; -pub use record::{ErrorId, ErrorRecord, ErrorReport}; +pub use kaptan_err_reportable_macros::{KaptanError, propagate}; +pub use record::{ErrorId, ErrorRecord, ReportableError}; pub use sink::ErrorSink; /// Implementation details used only by macro expansions. #[doc(hidden)] pub mod __private { - use crate::ErrorReport; + use crate::ReportableError; /// Reports an error only when it is the final result leaving an annotated /// function. Borrowing preserves the exact result returned to the caller. #[inline] - pub fn report_result( + pub fn report_result( result: &core::result::Result, raised_at: &'static str, ) { diff --git a/firmware/libs/kaptan-err-propagate/src/record.rs b/firmware/libs/kaptan-err-reportable/src/record.rs similarity index 81% rename from firmware/libs/kaptan-err-propagate/src/record.rs rename to firmware/libs/kaptan-err-reportable/src/record.rs index 229ead6..0713666 100644 --- a/firmware/libs/kaptan-err-propagate/src/record.rs +++ b/firmware/libs/kaptan-err-reportable/src/record.rs @@ -1,6 +1,6 @@ //! Stable error IDs and bounded pending records. -/// Stable nonzero identity for one typed firmware error variant. +/// Stable nonzero identity for one reportable firmware error variant. #[derive(Clone, Copy, Debug, Eq, PartialEq)] #[repr(transparent)] pub struct ErrorId(u16); @@ -21,18 +21,18 @@ impl ErrorId { /// Implemented by [`crate::KaptanError`] derives. /// /// Obtaining an ID never publishes, allocates, or changes safety state. -pub trait ErrorReport { +pub trait ReportableError { /// Returns the stable ID assigned to this error variant. fn error_id(&self) -> ErrorId; } -impl ErrorReport for ErrorId { +impl ReportableError for ErrorId { fn error_id(&self) -> ErrorId { *self } } -/// One reported typed firmware error and its reporting boundary. +/// One reported firmware error and its reporting point. #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub struct ErrorRecord { id: ErrorId, @@ -49,7 +49,7 @@ impl ErrorRecord { self.id.get() } - /// Compile-time `file:line` of the propagation boundary that reported it. + /// Compile-time `file:line` of the reporting point. pub const fn raised_at(self) -> &'static str { self.raised_at } @@ -60,7 +60,7 @@ mod tests { use super::{ErrorId, ErrorRecord}; #[test] - fn record_keeps_only_the_explicit_id_and_reporting_boundary() { + fn record_keeps_only_the_explicit_id_and_reporting_point() { let record = ErrorRecord::new(ErrorId::new(65004), "module.rs:42"); assert_eq!(record.id(), 65004); assert_eq!(record.raised_at(), "module.rs:42"); diff --git a/firmware/libs/kaptan-err-propagate/src/sink.rs b/firmware/libs/kaptan-err-reportable/src/sink.rs similarity index 91% rename from firmware/libs/kaptan-err-propagate/src/sink.rs rename to firmware/libs/kaptan-err-reportable/src/sink.rs index fa581a3..e6aa3ec 100644 --- a/firmware/libs/kaptan-err-propagate/src/sink.rs +++ b/firmware/libs/kaptan-err-reportable/src/sink.rs @@ -1,10 +1,10 @@ -//! One-slot retry ownership for a typed-error sink. +//! One-slot retry ownership for a reportable-error sink. use crate::ErrorRecord; -/// Retains one typed error until a lower sink accepts it. +/// Retains one reportable error until a lower sink accepts it. /// -/// Typed errors are never filtered. A composition may give them priority over +/// Reportable errors are never filtered. A composition may give them priority over /// best-effort logs without coupling the producer to its transport. pub struct ErrorSink { pending: Option, diff --git a/firmware/libs/kaptan-err-propagate/tests/propagate.rs b/firmware/libs/kaptan-err-reportable/tests/propagate.rs similarity index 67% rename from firmware/libs/kaptan-err-propagate/tests/propagate.rs rename to firmware/libs/kaptan-err-reportable/tests/propagate.rs index e05b4ef..8e81564 100644 --- a/firmware/libs/kaptan-err-propagate/tests/propagate.rs +++ b/firmware/libs/kaptan-err-reportable/tests/propagate.rs @@ -1,4 +1,4 @@ -use kaptan_err_propagate::{ErrorId, ErrorReport, KaptanError}; +use kaptan_err_reportable::{ErrorId, KaptanError, ReportableError}; #[derive(Clone, Copy, Debug, Eq, PartialEq, KaptanError)] enum TestError { @@ -26,18 +26,18 @@ fn middle() -> Result<(), TestError> { fail() } -#[kaptan_err_propagate::propagate] +#[kaptan_err_reportable::propagate] fn succeeds() -> Result { Ok(7) } -#[kaptan_err_propagate::propagate] +#[kaptan_err_reportable::propagate] fn annotated_outer() -> Result<(), TestError> { middle()?; Ok(()) } -#[kaptan_err_propagate::propagate] +#[kaptan_err_reportable::propagate] fn annotated_inner() -> Result<(), TestError> { fail() } @@ -46,15 +46,15 @@ fn unannotated_outer() -> Result<(), TestError> { annotated_inner() } -#[kaptan_err_propagate::propagate] +#[kaptan_err_reportable::propagate] fn handles_inner_error() -> Result<(), TestError> { let _handled = fail().is_err(); Ok(()) } -#[kaptan_err_propagate::propagate] -fn returns_explicit_error(fail_at_boundary: bool) -> Result<(), TestError> { - if fail_at_boundary { +#[kaptan_err_reportable::propagate] +fn returns_explicit_error(report_error: bool) -> Result<(), TestError> { + if report_error { return Err(TestError::Failed); } Ok(()) @@ -62,24 +62,24 @@ fn returns_explicit_error(fail_at_boundary: bool) -> Result<(), TestError> { type AliasedResult = core::result::Result; -#[kaptan_err_propagate::propagate] +#[kaptan_err_reportable::propagate] fn returns_alias() -> AliasedResult<()> { fail() } -#[kaptan_err_propagate::propagate] -fn reports_final_converted_error() -> Result<(), OuterError> { +#[kaptan_err_reportable::propagate] +fn reports_converted_error() -> Result<(), OuterError> { fail()?; Ok(()) } -#[kaptan_err_propagate::propagate] +#[kaptan_err_reportable::propagate] fn reports_error_id() -> Result<(), ErrorId> { Err(ErrorId::new(65003)) } -#[kaptan_err_propagate::propagate] -async fn async_boundary() -> Result<(), TestError> { +#[kaptan_err_reportable::propagate] +async fn async_reporting_point() -> Result<(), TestError> { fail()?; Ok(()) } @@ -87,28 +87,28 @@ async fn async_boundary() -> Result<(), TestError> { struct Service; impl Service { - #[kaptan_err_propagate::propagate] - fn method(&self, fail_at_boundary: bool) -> Result<(), TestError> { - if fail_at_boundary { + #[kaptan_err_reportable::propagate] + fn method(&self, report_error: bool) -> Result<(), TestError> { + if report_error { fail()?; } Ok(()) } } -fn take_record() -> kaptan_err_propagate::ErrorRecord { - kaptan_err_propagate::take().expect("escaping error must be reported") +fn take_record() -> kaptan_err_reportable::ErrorRecord { + kaptan_err_reportable::take().expect("escaping error must be reported") } #[test] -fn reports_only_final_errors_leaving_annotated_boundaries() { - while kaptan_err_propagate::take().is_some() {} +fn reports_only_errors_leaving_annotated_reporting_points() { + while kaptan_err_reportable::take().is_some() {} assert_eq!(succeeds(), Ok(7)); - assert!(kaptan_err_propagate::take().is_none()); + assert!(kaptan_err_reportable::take().is_none()); assert_eq!(handles_inner_error(), Ok(())); - assert!(kaptan_err_propagate::take().is_none()); + assert!(kaptan_err_reportable::take().is_none()); assert_eq!(annotated_outer(), Err(TestError::Failed)); assert_eq!(take_record().id(), TestError::Failed.error_id().get()); @@ -123,7 +123,7 @@ fn reports_only_final_errors_leaving_annotated_boundaries() { assert_eq!(take_record().id(), TestError::Failed.error_id().get()); assert_eq!( - reports_final_converted_error(), + reports_converted_error(), Err(OuterError::Converted(TestError::Failed)) ); assert_eq!( @@ -135,9 +135,9 @@ fn reports_only_final_errors_leaving_annotated_boundaries() { assert_eq!(take_record().id(), 65003); assert_eq!(Service.method(false), Ok(())); - assert!(kaptan_err_propagate::take().is_none()); + assert!(kaptan_err_reportable::take().is_none()); - let mut future = core::pin::pin!(async_boundary()); + let mut future = core::pin::pin!(async_reporting_point()); let mut context = core::task::Context::from_waker(core::task::Waker::noop()); assert_eq!( core::future::Future::poll(future.as_mut(), &mut context), diff --git a/firmware/libs/kaptan-flight-config/Cargo.toml b/firmware/libs/kaptan-flight-config/Cargo.toml index db9f36b..c5a25b6 100644 --- a/firmware/libs/kaptan-flight-config/Cargo.toml +++ b/firmware/libs/kaptan-flight-config/Cargo.toml @@ -10,6 +10,6 @@ workspace = true [dependencies] kaptan-config = { path = "../kaptan-config" } -kaptan-err-propagate = { path = "../kaptan-err-propagate" } +kaptan-err-reportable = { path = "../kaptan-err-reportable" } kaptan-log = { path = "../kaptan-log" } minicbor = { version = "0.25", features = ["derive"] } diff --git a/firmware/libs/kaptan-flight-config/src/cbor.rs b/firmware/libs/kaptan-flight-config/src/cbor.rs index 76da9ff..159f50e 100644 --- a/firmware/libs/kaptan-flight-config/src/cbor.rs +++ b/firmware/libs/kaptan-flight-config/src/cbor.rs @@ -3,7 +3,7 @@ use kaptan_config::{ ConfigModel, ConfigValue, ConfigViolation, FieldWriteError, ValidationRule, ValueKind, }; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use minicbor::{Decoder, Encoder, encode::Write}; use crate::{CandidateProfile, FORMAT_VERSION, SCHEMA_ID, VehicleCapabilities}; diff --git a/firmware/libs/kaptan-math/Cargo.toml b/firmware/libs/kaptan-math/Cargo.toml index b9f2d29..53ff9be 100644 --- a/firmware/libs/kaptan-math/Cargo.toml +++ b/firmware/libs/kaptan-math/Cargo.toml @@ -9,4 +9,4 @@ version.workspace = true workspace = true [dependencies] -kaptan-err-propagate = { path = "../kaptan-err-propagate" } +kaptan-err-reportable = { path = "../kaptan-err-reportable" } diff --git a/firmware/libs/kaptan-math/src/lib.rs b/firmware/libs/kaptan-math/src/lib.rs index eaff6ad..4ce0452 100644 --- a/firmware/libs/kaptan-math/src/lib.rs +++ b/firmware/libs/kaptan-math/src/lib.rs @@ -7,7 +7,7 @@ #![no_std] use core::marker::PhantomData; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; /// Failure reported by a checked mathematical operation. /// diff --git a/firmware/libs/kaptan-mavlink/Cargo.toml b/firmware/libs/kaptan-mavlink/Cargo.toml index a65114b..70c0666 100644 --- a/firmware/libs/kaptan-mavlink/Cargo.toml +++ b/firmware/libs/kaptan-mavlink/Cargo.toml @@ -16,7 +16,7 @@ sensor-telemetry = ["dep:kaptan-sensor"] dialect-kaptan = [] [dependencies] -kaptan-err-propagate = { path = "../kaptan-err-propagate" } +kaptan-err-reportable = { path = "../kaptan-err-reportable" } kaptan-dma = { path = "../kaptan-dma" } kaptan-sensor = { path = "../kaptan-sensor", optional = true } kaptan-tx = { path = "../kaptan-tx" } diff --git a/firmware/libs/kaptan-mavlink/definitions/kaptan/error.xml b/firmware/libs/kaptan-mavlink/definitions/kaptan/error.xml index 6dd8976..36317e0 100644 --- a/firmware/libs/kaptan-mavlink/definitions/kaptan/error.xml +++ b/firmware/libs/kaptan-mavlink/definitions/kaptan/error.xml @@ -5,9 +5,9 @@ - Typed firmware error reported when an Err leaves an annotated propagation boundary. This is distinct from every logging macro, which emits KAPTAN_LOG. The stable ID is explicitly assigned to the Rust error variant. Structured configuration failures remain authoritative in KAPTAN_CONFIG_RESULT. + Reportable firmware error emitted when an Err leaves an annotated reporting point. This is distinct from every logging macro, which emits KAPTAN_LOG. The stable ID is explicitly assigned to the Rust error variant. Structured configuration failures remain authoritative in KAPTAN_CONFIG_RESULT. Stable explicitly assigned error catalog ID. Zero is reserved. - Zero-padded compile-time file:line of the propagation boundary that reported the error. + Zero-padded compile-time file:line of the reporting point. diff --git a/firmware/libs/kaptan-mavlink/src/transmitter.rs b/firmware/libs/kaptan-mavlink/src/transmitter.rs index 1b46f20..375533e 100644 --- a/firmware/libs/kaptan-mavlink/src/transmitter.rs +++ b/firmware/libs/kaptan-mavlink/src/transmitter.rs @@ -1,7 +1,7 @@ //! MAVLink frame encoding and UART transmission API. use kaptan_dma::{DmaTxBufferFactory, DmaTxEngine, TxCompletion}; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use kaptan_tx::{PendingFrame, TransmitQueue}; use crate::MavlinkFrame; diff --git a/firmware/libs/kaptan-navigation/Cargo.toml b/firmware/libs/kaptan-navigation/Cargo.toml index 4b1ef8d..36f8231 100644 --- a/firmware/libs/kaptan-navigation/Cargo.toml +++ b/firmware/libs/kaptan-navigation/Cargo.toml @@ -14,7 +14,7 @@ default = [] # executable. It is not part of a board build. sitl = ["dep:kaptan-sensor"] [dependencies] -kaptan-err-propagate = { path = "../kaptan-err-propagate" } +kaptan-err-reportable = { path = "../kaptan-err-reportable" } kaptan-math = { path = "../kaptan-math" } kaptan-sensor = { path = "../kaptan-sensor", optional = true } kaptan-time = { path = "../kaptan-time" } diff --git a/firmware/libs/kaptan-navigation/src/eskf.rs b/firmware/libs/kaptan-navigation/src/eskf.rs index ef8f903..7be882f 100644 --- a/firmware/libs/kaptan-navigation/src/eskf.rs +++ b/firmware/libs/kaptan-navigation/src/eskf.rs @@ -1,6 +1,6 @@ //! Fixed-size multiplicative error-state Kalman filter. -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use kaptan_math::{Frd, MathError, Ned, Sensor, UnitQuaternion, Vector3, sqrt}; use kaptan_time::Timestamp; diff --git a/firmware/libs/kaptan-safety/Cargo.toml b/firmware/libs/kaptan-safety/Cargo.toml index f7ad19b..6d37a73 100644 --- a/firmware/libs/kaptan-safety/Cargo.toml +++ b/firmware/libs/kaptan-safety/Cargo.toml @@ -9,5 +9,5 @@ version.workspace = true workspace = true [dependencies] -kaptan-err-propagate = { path = "../kaptan-err-propagate" } +kaptan-err-reportable = { path = "../kaptan-err-reportable" } kaptan-time = { path = "../kaptan-time" } diff --git a/firmware/libs/kaptan-safety/src/lib.rs b/firmware/libs/kaptan-safety/src/lib.rs index 721dbbe..f8cc2b6 100644 --- a/firmware/libs/kaptan-safety/src/lib.rs +++ b/firmware/libs/kaptan-safety/src/lib.rs @@ -7,7 +7,7 @@ #![no_std] -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use kaptan_time::Timestamp; /// Supervisor arming state. diff --git a/firmware/platforms/stm32f7/Cargo.toml b/firmware/platforms/stm32f7/Cargo.toml index 6d7d92e..77a8fdd 100644 --- a/firmware/platforms/stm32f7/Cargo.toml +++ b/firmware/platforms/stm32f7/Cargo.toml @@ -15,7 +15,7 @@ workspace = true test = false [dependencies] -kaptan-err-propagate = { path = "../../libs/kaptan-err-propagate" } +kaptan-err-reportable = { path = "../../libs/kaptan-err-reportable" } kaptan-config = { path = "../../libs/kaptan-config" } kaptan-config-mavlink = { path = "../../libs/kaptan-config-mavlink" } kaptan-data-channel = { path = "../../libs/kaptan-data-channel" } diff --git a/firmware/platforms/stm32f7/src/f722/board.rs b/firmware/platforms/stm32f7/src/f722/board.rs index 4cc82b0..ba62803 100644 --- a/firmware/platforms/stm32f7/src/f722/board.rs +++ b/firmware/platforms/stm32f7/src/f722/board.rs @@ -22,7 +22,7 @@ use kaptan_drivers::{ }, mtf01::Mtf01Service, }; -use kaptan_err_propagate::{ErrorId, ErrorSink}; +use kaptan_err_reportable::{ErrorId, ErrorSink}; use kaptan_log::{DeliveryClass, LogSinkQueue, TransportAdmission}; use kaptan_spi::SpiCompletion; use stm32f7::stm32f722; @@ -525,7 +525,7 @@ impl F722LidarState { let _ = publish_lidar_event(event); } - #[kaptan_err_propagate::propagate] + #[kaptan_err_reportable::propagate] pub fn on_timer(&mut self) -> Result<(), StartupError> { if let Some(range) = self.range.as_mut() { if self.startup_ticks < LIDAR_STARTUP_TICKS { @@ -568,7 +568,7 @@ pub fn process_imu(imu: &mut F722Imu, events: u8) { } } -#[kaptan_err_propagate::propagate] +#[kaptan_err_reportable::propagate] fn accept_imu_event(event: ImuEvent) -> Result<(), ErrorId> { match event { ImuEvent::Sample(sample) => { @@ -683,7 +683,7 @@ where fn drain_one_mavlink_diagnostic(&mut self) { if self.mavlink_errors.is_empty() - && let Some(record) = kaptan_err_propagate::take() + && let Some(record) = kaptan_err_reportable::take() { let _ = self.mavlink_errors.publish_record(record); } @@ -789,7 +789,7 @@ pub fn record_mavlink_completion(completion: kaptan_dma::TxCompletion) { } } -#[kaptan_err_propagate::propagate] +#[kaptan_err_reportable::propagate] fn publish_lidar_event( event: LidarLiteV3ServiceEvent, ) -> Result<(), LidarError> { @@ -810,14 +810,14 @@ mod tests { #[test] fn transient_i2c_busy_is_retry_not_a_typed_lidar_fault() { - while kaptan_err_propagate::take().is_some() {} + while kaptan_err_reportable::take().is_some() {} assert_eq!( publish_lidar_event(LidarLiteV3ServiceEvent::Fault(LidarError::Start( I2c1Error::Busy, ))), Ok(()) ); - assert!(kaptan_err_propagate::take().is_none()); + assert!(kaptan_err_reportable::take().is_none()); assert!(matches!( publish_lidar_event(LidarLiteV3ServiceEvent::Fault(LidarError::Start( @@ -825,7 +825,7 @@ mod tests { ))), Err(LidarError::Start(I2c1Error::InvalidLength)) )); - assert!(kaptan_err_propagate::take().is_some()); + assert!(kaptan_err_reportable::take().is_some()); assert!(matches!( publish_lidar_event(LidarLiteV3ServiceEvent::Fault(LidarError::Start( @@ -833,6 +833,6 @@ mod tests { ))), Err(LidarError::Start(I2c1Error::InvalidAddress)) )); - assert!(kaptan_err_propagate::take().is_some()); + assert!(kaptan_err_reportable::take().is_some()); } } diff --git a/firmware/platforms/stm32f7/src/f722/clock.rs b/firmware/platforms/stm32f7/src/f722/clock.rs index b0fa95c..ae24e4d 100644 --- a/firmware/platforms/stm32f7/src/f722/clock.rs +++ b/firmware/platforms/stm32f7/src/f722/clock.rs @@ -1,7 +1,7 @@ //! STM32F722 Pll216 clock-source assembly. use super::peripherals::{DwtMicrosecondClock, select_pll216_profile}; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use stm32f7::stm32f722; /// Core frequency in whole megahertz after selecting the PLL216 board profile. diff --git a/firmware/platforms/stm32f7/src/f722/peripherals/clock.rs b/firmware/platforms/stm32f7/src/f722/peripherals/clock.rs index 1a964fa..71fa1a7 100644 --- a/firmware/platforms/stm32f7/src/f722/peripherals/clock.rs +++ b/firmware/platforms/stm32f7/src/f722/peripherals/clock.rs @@ -1,6 +1,6 @@ //! Deterministic STM32F722 PLL clock-source selection. -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use stm32f7::stm32f722; const CLOCK_SWITCH_POLL_LIMIT: u16 = 1_024; diff --git a/firmware/platforms/stm32f7/src/f722/peripherals/i2c1.rs b/firmware/platforms/stm32f7/src/f722/peripherals/i2c1.rs index 561adfd..a3b1508 100644 --- a/firmware/platforms/stm32f7/src/f722/peripherals/i2c1.rs +++ b/firmware/platforms/stm32f7/src/f722/peripherals/i2c1.rs @@ -1,6 +1,6 @@ //! STM32F722 I²C1 interrupt-driven controller. -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use kaptan_i2c::{I2cBus, I2cCompletion}; use stm32f7::stm32f722; diff --git a/firmware/platforms/stm32f7/src/f722/peripherals/spi1.rs b/firmware/platforms/stm32f7/src/f722/peripherals/spi1.rs index 45b7842..42ce3ac 100644 --- a/firmware/platforms/stm32f7/src/f722/peripherals/spi1.rs +++ b/firmware/platforms/stm32f7/src/f722/peripherals/spi1.rs @@ -5,7 +5,7 @@ //! is generated after the last serial frame; transmit completion can occur //! while the final serial clock is still in progress. -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use kaptan_spi::SpiCompletion; use stm32f7::stm32f722; diff --git a/firmware/platforms/stm32f7/src/f722/peripherals/spi3.rs b/firmware/platforms/stm32f7/src/f722/peripherals/spi3.rs index 635fbcc..1ab3417 100644 --- a/firmware/platforms/stm32f7/src/f722/peripherals/spi3.rs +++ b/firmware/platforms/stm32f7/src/f722/peripherals/spi3.rs @@ -5,7 +5,7 @@ //! is generated after the last serial frame; transmit completion can occur //! while the final serial clock is still in progress. -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use kaptan_spi::SpiCompletion; use stm32f7::stm32f722; diff --git a/firmware/platforms/stm32f7/src/f722/peripherals/time.rs b/firmware/platforms/stm32f7/src/f722/peripherals/time.rs index 4eeccda..b132243 100644 --- a/firmware/platforms/stm32f7/src/f722/peripherals/time.rs +++ b/firmware/platforms/stm32f7/src/f722/peripherals/time.rs @@ -1,7 +1,7 @@ //! DWT-backed monotonic microsecond clock for STM32F722. use cortex_m::peripheral::{DCB, DWT}; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use kaptan_time::{MonotonicClock, Timestamp}; /// A DWT cycle counter extended into monotonic microseconds. diff --git a/firmware/platforms/stm32f7/src/f722/peripherals/usart.rs b/firmware/platforms/stm32f7/src/f722/peripherals/usart.rs index aeed18f..6718030 100644 --- a/firmware/platforms/stm32f7/src/f722/peripherals/usart.rs +++ b/firmware/platforms/stm32f7/src/f722/peripherals/usart.rs @@ -1,6 +1,6 @@ //! STM32F722 USART routes used by supported boards. -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use stm32f7::stm32f722; /// UART baud-rate configuration error. diff --git a/firmware/platforms/stm32f7/src/f722/peripherals/usart1_tx_dma2_stream7.rs b/firmware/platforms/stm32f7/src/f722/peripherals/usart1_tx_dma2_stream7.rs index 0463d00..829ea80 100644 --- a/firmware/platforms/stm32f7/src/f722/peripherals/usart1_tx_dma2_stream7.rs +++ b/firmware/platforms/stm32f7/src/f722/peripherals/usart1_tx_dma2_stream7.rs @@ -5,7 +5,7 @@ //! cannot be selected at construction. use kaptan_dma::{DmaReadableBuffer, DmaTxEngine, TxCompletion}; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use stm32f7::stm32f722; use super::Usart1Tx; diff --git a/firmware/platforms/stm32f7/src/f722/peripherals/usart2_tx_dma1_stream6.rs b/firmware/platforms/stm32f7/src/f722/peripherals/usart2_tx_dma1_stream6.rs index 21531f3..01d6c96 100644 --- a/firmware/platforms/stm32f7/src/f722/peripherals/usart2_tx_dma1_stream6.rs +++ b/firmware/platforms/stm32f7/src/f722/peripherals/usart2_tx_dma1_stream6.rs @@ -5,7 +5,7 @@ //! cannot be selected at construction. use kaptan_dma::{DmaReadableBuffer, DmaTxEngine, TxCompletion}; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use stm32f7::stm32f722; use super::Usart2Tx; diff --git a/firmware/platforms/stm32f7/src/f722/sensors.rs b/firmware/platforms/stm32f7/src/f722/sensors.rs index 82a3cd8..01046f7 100644 --- a/firmware/platforms/stm32f7/src/f722/sensors.rs +++ b/firmware/platforms/stm32f7/src/f722/sensors.rs @@ -5,7 +5,7 @@ use kaptan_drivers::{ icm42688::{Error as Icm42688Error, Icm42688, Icm42688Service, Icm42688ServiceEvent}, mpu6000::{Error as Mpu6000Error, Mpu6000, Mpu6000Config, Mpu6000Service, Mpu6000ServiceEvent}, }; -use kaptan_err_propagate::{ErrorId, ErrorReport}; +use kaptan_err_reportable::{ErrorId, ReportableError}; use kaptan_sensor::imu::ImuSnapshot; use kaptan_spi::SpiCompletion; use stm32f7::stm32f722; diff --git a/firmware/platforms/stm32f7/src/lib.rs b/firmware/platforms/stm32f7/src/lib.rs index d3477e2..0814986 100644 --- a/firmware/platforms/stm32f7/src/lib.rs +++ b/firmware/platforms/stm32f7/src/lib.rs @@ -9,7 +9,7 @@ #![no_std] use kaptan_config::Config; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; pub use kaptan_drivers::mpu6000::{ AccelerometerRange, DigitalLowPassFilter, GyroscopeRange, Mpu6000Config, diff --git a/firmware/platforms/stm32f7/tests/platform_safety_boundary.rs b/firmware/platforms/stm32f7/tests/platform_safety_boundary.rs index 48530b8..ee35fbd 100644 --- a/firmware/platforms/stm32f7/tests/platform_safety_boundary.rs +++ b/firmware/platforms/stm32f7/tests/platform_safety_boundary.rs @@ -369,10 +369,10 @@ fn mavlink_transport_faults_do_not_recurse_or_retain_dead_accounting() { } #[test] -fn f722_producers_keep_logs_and_typed_errors_separate() { +fn f722_producers_keep_logs_and_reportable_errors_separate() { let board = platform_source("src/f722/board.rs"); let logger = platform_source("../../libs/kaptan-log/src/facade.rs"); - let errors = platform_source("../../libs/kaptan-err-propagate/src/ingress.rs"); + let errors = platform_source("../../libs/kaptan-err-reportable/src/ingress.rs"); for macro_name in [ "kaptan_log::debug!", @@ -385,7 +385,7 @@ fn f722_producers_keep_logs_and_typed_errors_separate() { "f722 does not exercise {macro_name}" ); } - assert!(board.contains("#[kaptan_err_propagate::propagate]")); + assert!(board.contains("#[kaptan_err_reportable::propagate]")); assert!(!board.contains("report_error")); assert!(!board.contains("report_static_error")); assert!(logger.contains("GLOBAL_INGRESS_CAPACITY")); diff --git a/firmware/tools/configurator/src/serial_worker.rs b/firmware/tools/configurator/src/serial_worker.rs index 4c92448..91b4618 100644 --- a/firmware/tools/configurator/src/serial_worker.rs +++ b/firmware/tools/configurator/src/serial_worker.rs @@ -539,7 +539,7 @@ mod tests { } #[test] - fn packet_and_history_decode_a_typed_kaptan_error() { + fn packet_and_history_decode_a_reportable_kaptan_error() { let raised_at_text = "platforms/stm32f7/src/f722/board.rs:572"; let mut raised_at = [0; 96]; raised_at[..raised_at_text.len()].copy_from_slice(raised_at_text.as_bytes()); @@ -684,7 +684,7 @@ mod tests { } #[test] - fn malformed_typed_error_location_is_not_added_to_history() { + fn malformed_reportable_error_location_is_not_added_to_history() { let mut raised_at = [0_u8; 96]; raised_at[0] = 0xff; let mut frame = MavlinkFrame::new(); diff --git a/firmware/tools/sitl/Cargo.toml b/firmware/tools/sitl/Cargo.toml index ff3d91b..f17a4d0 100644 --- a/firmware/tools/sitl/Cargo.toml +++ b/firmware/tools/sitl/Cargo.toml @@ -9,7 +9,7 @@ version.workspace = true workspace = true [dependencies] -kaptan-err-propagate = { path = "../../libs/kaptan-err-propagate" } +kaptan-err-reportable = { path = "../../libs/kaptan-err-reportable" } kaptan-control = { path = "../../libs/kaptan-control" } kaptan-config = { path = "../../libs/kaptan-config" } kaptan-config-mavlink = { path = "../../libs/kaptan-config-mavlink" } diff --git a/firmware/tools/sitl/src/config/store.rs b/firmware/tools/sitl/src/config/store.rs index 2c7a6df..c73f11e 100644 --- a/firmware/tools/sitl/src/config/store.rs +++ b/firmware/tools/sitl/src/config/store.rs @@ -7,7 +7,7 @@ use std::{ }; use kaptan_config::ConfigStore; -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use kaptan_flight_config::{ CandidateProfile, CborEncodeError, CborError, MAXIMUM_CANDIDATE_BYTES, VehicleProfile, decode_candidate, encode_candidate, diff --git a/firmware/tools/sitl/src/protocol.rs b/firmware/tools/sitl/src/protocol.rs index 3ffef86..69f4088 100644 --- a/firmware/tools/sitl/src/protocol.rs +++ b/firmware/tools/sitl/src/protocol.rs @@ -4,7 +4,7 @@ //! dialect. It is confined to one host network namespace and is versioned so //! malformed simulator traffic never becomes estimator or motor authority. -use kaptan_err_propagate::KaptanError; +use kaptan_err_reportable::KaptanError; use std::net::SocketAddr; pub const SENSOR_PORT: u16 = 14_660;