Namespace facades for switching between platforms.
Sometimes code needs to be shared between a contrainted platform (such as an embedded system) and a target that has a more fully featured environment. This crate provides a series of module wrappers that can be used in combination with cargo manifest feature definitions to switch between options at compile time.
Using thiserror
with defmt
enabled on an embedded system:
toml
[features]
default = ["std"]
std = ["platform-switch/std_error"]
mcu = ["platform-switch/core_error", "platform-switch/defmt"] # Requires nightly
```rust use platformswitch::log as log; use platformswitch::thiserror as thiserror;
enum ExampleError { #[error("Error #1")] Error1, #[error("Error #2")] Error2, }
fn error_logger() { log::trace!("Trace"); log::debug!("Debug"); log::info!("Info"); log::warn!("Warn"); log::error!("Error");
log::error!("Error: {}", ExampleError::Error1);
log::error!("Error: {}", ExampleError::Error2);
} ```
If a stable toolchain is required, thiserror
can be disabled with the following features and attributes:
toml
[features]
default = ["std"]
std = ["thiserror", "platform-switch/std_error"]
mcu = ["platform-switch/defmt"]
thiserror = []
```rust use platformswitch::log as log; use platformswitch::thiserror as thiserror;
enum ExampleError { #[cfg_attr(feature = "thiserror", error("Error #1"))] Error1,
#[cfg_attr(feature = "thiserror", error("Error #2"))]
Error2,
} ```