Skip to content

Commit

Permalink
Implement defmt::Format for Error (#346)
Browse files Browse the repository at this point in the history
  • Loading branch information
ia0 authored Dec 29, 2023
1 parent 1d1472d commit e86ebd9
Show file tree
Hide file tree
Showing 13 changed files with 143 additions and 10 deletions.
2 changes: 1 addition & 1 deletion crates/board/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,4 @@

## 0.1.0

<!-- Increment to skip CHANGELOG.md test: 15 -->
<!-- Increment to skip CHANGELOG.md test: 16 -->
1 change: 1 addition & 0 deletions crates/board/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion crates/board/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ wasefire-logger = { version = "0.1.4-git", path = "../logger" }
wasefire-store = { version = "0.2.3-git", path = "../store" }

[features]
defmt = ["dep:defmt", "wasefire-logger/defmt"]
defmt = ["dep:defmt", "wasefire-error/defmt", "wasefire-logger/defmt"]
internal-aead = ["dep:aead"]
internal-ecc = [
"dep:ecdsa",
Expand Down
2 changes: 1 addition & 1 deletion crates/error/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

## 0.1.0-git

<!-- Increment to skip CHANGELOG.md test: 1 -->
<!-- Increment to skip CHANGELOG.md test: 2 -->
101 changes: 100 additions & 1 deletion crates/error/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions crates/error/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,8 @@ keywords = ["embedded", "framework", "no-std"]
categories = ["embedded", "no-std"]

[dependencies]
defmt = { version = "0.3.5", default-features = false, optional = true }
num_enum = { version = "0.7.1", default-features = false }

[features]
defmt = ["dep:defmt"]
26 changes: 23 additions & 3 deletions crates/error/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ impl CodeParam for u16 {}
/// Values from 0 to 127 (0x7f) are reserved for common error spaces and defined by this enum.
/// Values from 128 (0x80) to 255 (0xff) are reserved for implementation-specific error spaces.
#[derive(Debug, Copy, Clone, TryFromPrimitive, IntoPrimitive)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[non_exhaustive]
#[repr(u8)]
pub enum Space {
Expand All @@ -126,6 +127,7 @@ pub enum Space {
/// Values from 32768 (0x8000) to 65535 (0xffff) are reserved for implementation-specific error
/// codes.
#[derive(Debug, Copy, Clone, TryFromPrimitive, IntoPrimitive)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[non_exhaustive]
#[repr(u16)]
pub enum Code {
Expand All @@ -139,8 +141,15 @@ pub enum Code {
BadState = 7,
}

impl core::fmt::Debug for Error {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{self}")
}
}

impl core::fmt::Display for Error {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
// Keep in sync with defmt::Format.
match Space::try_from_primitive(self.space()) {
Ok(x) => write!(f, "{x:?}")?,
Err(TryFromPrimitiveError { number: x }) => write!(f, "[{x:02x}]")?,
Expand All @@ -153,9 +162,20 @@ impl core::fmt::Display for Error {
}
}

impl core::fmt::Debug for Error {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{self}")
#[cfg(feature = "defmt")]
impl defmt::Format for Error {
fn format(&self, fmt: defmt::Formatter) {
// Keep in sync with core::fmt::Display.
use defmt::write;
match Space::try_from_primitive(self.space()) {
Ok(x) => write!(fmt, "{:?}", x),
Err(TryFromPrimitiveError { number: x }) => write!(fmt, "[{:02x}]", x),
}
write!(fmt, ":");
match Code::try_from_primitive(self.code()) {
Ok(x) => write!(fmt, "{:?}", x),
Err(TryFromPrimitiveError { number: x }) => write!(fmt, "[{:04x}]", x),
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion crates/error/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@ set -e
test_helper

cargo test
cargo check --target=thumbv7em-none-eabi
cargo check --target=thumbv7em-none-eabi --features=defmt
cargo check --target=wasm32-unknown-unknown
1 change: 1 addition & 0 deletions crates/runner-nordic/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions crates/runner-nordic/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ debug = [
"dep:defmt-rtt",
"dep:panic-probe",
"wasefire-board-api/defmt",
"wasefire-error/defmt",
"wasefire-logger/defmt",
"wasefire-scheduler/defmt",
]
Expand Down
2 changes: 1 addition & 1 deletion crates/scheduler/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,4 @@

## 0.1.0

<!-- Increment to skip CHANGELOG.md test: 25 -->
<!-- Increment to skip CHANGELOG.md test: 26 -->
1 change: 1 addition & 0 deletions crates/scheduler/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 7 additions & 1 deletion crates/scheduler/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,13 @@ features = ["toctou"]
optional = true

[features]
defmt = ["debug", "dep:defmt", "wasefire-board-api/defmt", "wasefire-logger/defmt"]
defmt = [
"debug",
"dep:defmt",
"wasefire-board-api/defmt",
"wasefire-error/defmt",
"wasefire-logger/defmt",
]
log = ["debug", "wasefire-board-api/log", "wasefire-logger/log"]
std = ["wasefire-board-api/std", "wasefire-store/std"]
# Selects between Wasm applet or native applet (choose exactly one).
Expand Down

0 comments on commit e86ebd9

Please sign in to comment.