Crate simple_si_units_core
source ·Expand description
simple-si-units-core
This crate exists to support the simple-si-units. Please go there for more information.
Contents
Crate simple-si-units-core exports the following:
NumLike
This is an ergonomic trait bundle that combines the following:
- std::ops::Add
- std::ops::AddAssign
- std::ops::Sub
- std::ops::SubAssign
- std::ops::Mul
- std::ops::MulAssign
- std::ops::Div
- std::ops::DivAssign
- std::ops::Neg
- Clone
- std::fmt::Debug
- std::fmt::Display
Thus you can use this trait as part of a struct or function template definition, like this:
use simple_si_units_core::NumLike;
pub struct MyUnit<DT: NumLike> {
v: DT,
}
impl<DT: NumLike> std::ops::Add<Self> for MyUnit<DT> {
type Output = Self;
fn add(self, rhs: Self) -> Self::Output {
return Self { v: self.v + rhs.v };
}
}
impl<DT: NumLike> std::ops::Sub<Self> for MyUnit<DT> {
type Output = Self;
fn sub(self, rhs: Self) -> Self::Output {
return Self { v: self.v - rhs.v };
}
}
License
This library is open source, licensed under the Mozilla Public License version 2.0. In summary, you may include this source code as-is in both open-source and proprietary projects without requesting permission from me, but if you modify the source code from this library then you must make your modified version of this library available under an open-source license.
Traits
- The
NumLike
trait is just a shorthand definition for any “number-like” type in Rust. “Number-like” means that a type implements the traits for standard arithmatic (Add, Sub, Mul, Div, AddAssign, SubAssign, MulAssign, DivAssign, and Neg), plus Clone, Debug, and Display. Most number types also implement the Copy marker trait, but that is not required (for example, an arbitrary-precision number type must dynamically allocate memory and thus cannot implement Copy).