8 个版本

0.5.2 2024年6月22日
0.5.1 2024年6月22日
0.4.1 2022年12月31日
0.3.1 2022年1月24日
0.2.1 2022年1月18日

#689 in Rust 模式

Download history 7/week @ 2024-04-21 1/week @ 2024-04-28 168/week @ 2024-06-09 277/week @ 2024-06-16 35/week @ 2024-06-23 44/week @ 2024-06-30 60/week @ 2024-07-28

每月60次下载
dims 中使用

MIT 许可证

32KB
488

dims_macro

这允许轻松创建存储值,如距离或质量,同时防止将克加到英尺上。

目的是将这些值保留在内存中作为 MassLength,无需担心单位,除非在创建值时,以及访问它时(用于显示、存储等)。

重要

这仍然是一个进行中的项目。请期待边缘粗糙,但我正在努力使它们变得平滑。

系统和单位创建

这些特定的系统已经在 dims 中设置好了,但你也可以设置自己的系统

#[macro_use]
use dims_macro;

// You can use this macro to generate a full system.
// It requires a length for use as debug.
measure_system!(name: LengthSystem, debug_unit: FOOT,data_type: f32);
// Allow for conversion between the systems
// Multiple `MultiplyBy` and `DivideBy` traits can be applied for each `MeasureSystem`
impl MultiplyBy<LengthSystem> for LengthSystem {
    type Output = AreaSystem;
}

measure_system!(name: AreaSystem, debug_unit: SQUARE_FOOT,data_type: f32);

impl DivideBy<LengthSystem> for AreaSystem {
    type Output = LengthSystem;
}

measure_system!(name: TemperatureSystem, debug_unit: FAHRENHEIT,data_type: f32);

// Set up some units, now

pub const FAHRENHEIT: UnitSimple<TemperatureSystem> = UnitSimple {
    /// The system is used for compiler warnings, but has no memory impact in production code
    // Offset is used to change the zero point.  Most of the time, this is zero
    offset: 459.67,
    // Ratio is multiplied to get to the base unit
    ratio: 5.0 / 9.0,
};
pub const CELCIUS: UnitSimple<TemperatureSystem> = UnitSimple {
    offset: 273.15,
    ratio: 1.0,
};
pub const FOOT: UnitSimple<LengthSystem> = UnitSimple {
    offset: 0.0,
    ratio: 0.3048,
};
pub const SQUARE_FOOT: UnitSimple<AreaSystem> = UnitSimple {
    offset: 0.0,
    ratio: 0.09290304,
};

这还包括 si_unit! 宏,它将根据给定信息生成一组(或单个)SI 单位。

待办事项:示例

MeasureSystem 宏

这用于轻松生成一个新的测量系统,使用方式如下

  measure_system! {name: Mass, debug_unit: GRAM, data_type: f32}

展开为(使用绝对路径)

#[derive(PartialEq, PartialOrd, Eq, Clone, Copy)]
pub struct Mass;
impl MeasureSystem for Mass {
    type N = f32;
    #[cfg(feature = "str")]
    const DEBUG_UNIT: UnitFormat<Self> = GRAM;
}

DEBUG_UNIT 是调试时值将如何显示。这 可能 是你想要的显示方式,但应该由消费代码明确指定。

其他说明

dimsdims_core 的包选项

dimsdims_macro 的包选项

  • str(默认)将利用 UnitFormat 并存储

    • abbr:单位缩写名称(如 mft
    • singular:单位的单数名称(如 metrefoot
    • plural:单位的复数名称(如 metresfeet
  • std 是默认选项,默认使用标准库。
    这启用了 UnitFormatTrait(因为函数返回 String),但仍然可以使用 no_stdstr(见下文)来存储单位名称信息。

依赖项

~0.4–0.9MB
~20K SLoC