1 个不稳定版本
0.1.0 | 2022年1月28日 |
---|
#11 in #pub
9KB
145 行
unit_system
带转换功能的自动推导类型化单位系统
示例
use unit_system::prelude::*;
#[derive(Unit)]
pub struct Meter(pub f32);
#[derive(Unit)]
pub struct Inch(pub f64);
// we can convert between any `Unit`s whose bases define BaseIntoBase
impl BaseIntoBase<Inch> for Meter {
fn convert_base(self) -> Inch {
Inch(self.0 as f64 * 40.)
}
}
// CMeter, DMeter, HMeter, NMeter... have been automatically built
let centimeters: CMeter = CMeter(3.);
// the same for inches (non-SI units would require manual impls of Unit)
let kilo_inches: KInch = centimeters.convert_outer();
// KInch{ 0.012. }
println!("{:?}", kilo_inches);
assert!(f64::abs(kilo_inches.0 - 0.0012) < 1e-7);
许可证
许可协议
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您提交的任何有意包含在作品中的贡献,将按上述方式双许可,不附加任何额外条款或条件。
README.md 是使用 cargo-readme 在CI上自动生成的。请修改 README.tpl 或 lib.rs(有关更多详细信息,请参阅 github 工作流程)。
依赖项
~1.5MB
~36K SLoC