#mcu #microcontrollers #namespaces #log-error #no-std

no-std platform-switch

用于在平台之间切换的命名空间门面

1个不稳定版本

0.1.0 2023年5月14日

#854 in 嵌入式开发

MPL-2.0 许可证

9KB

platform-switch

用于在平台之间切换的命名空间门面。

动机

有时代码需要在受限制的平台(如嵌入式系统)和具有更全面环境的目标之间共享。此crate提供了一系列模块包装器,可以与Cargo清单功能定义结合使用,以在编译时切换选项。

示例

在嵌入式系统上使用thiserror和启用了defmt

[features]
default = ["std"]
std = ["platform-switch/std_error"]
mcu = ["platform-switch/core_error", "platform-switch/defmt"] # Requires nightly
use platform_switch::log as log;
use platform_switch::thiserror as thiserror;

#[derive(thiserror::Error, Debug)]
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);
}

稳定工具链

如果需要稳定工具链,可以使用以下特性和属性禁用thiserror

[features]
default = ["std"]
std = ["thiserror", "platform-switch/std_error"]
mcu = ["platform-switch/defmt"]
thiserror = []
use platform_switch::log as log;
use platform_switch::thiserror as thiserror;

#[derive(Debug)]
#[cfg_attr(feature = "thiserror", derive(thiserror::Error))]
enum ExampleError {
    #[cfg_attr(feature = "thiserror", error("Error #1"))]
    Error1,

    #[cfg_attr(feature = "thiserror", error("Error #2"))]
    Error2,
}

许可证

Mozilla公共许可证版本2.0

依赖关系

~48–260KB