kissunits

Crates.iokissunits
lib.rskissunits
version2.0.0
sourcesrc
created_at2020-03-25 18:06:03.153447
updated_at2020-10-10 18:33:43.728586
descriptionDifferent units (like distances or coordinates), keeping it small and simple
homepage
repositoryhttps://github.com/dominicparga/kissunits
max_upload_size
id222731
size49,966
Parga Cacheiro, Dominic (dominicparga)

documentation

README

Units kept small and simple

Build Status nightly

Tag Crates.io Docs

Changelog Last commit

License

Welcome! :) Goal of this repo is to provide a simple and explicit implementation of units, without specialties or complex/implicit behaviour.

An example, including an example for forbidden implicit behaviour, is the following code-snippet:

use kissunits::{
    distance::{Kilometers, Meters},
    time::{Hours, Seconds},
};

fn main() {
    // use the struct directly
    let m = Meters(72_000.0);
    let h = Hours(2.0);

    // compile-error since resulting unit is not clear
    println!("{}", m / h); // ERROR

    // prints 36 km/h
    let km = Kilometers::from(m);
    println!("{} / {} = {}", km, h, km / h);

    // prints 10 m/s
    let s = Seconds::from(h);
    println!("{} / {} = {}", m, s, m / s);
}

One could argue, that the resulting type could be specified explicitly, like

let mps: MetersPerSecond = m / h;

but this would lead to implicit rounding errors.

Setup and usage

Rust has a build-tool called cargo, which can be used to run everything except scripts in scripts/.

# Just executing some easy cargo-build-commands
./scripts/build.sh
# Run the example
cargo run --example basic

Credits

The project started in the early 2020. This section honors the workers and helpers of this project, sorted by their last names.

Dominic Parga Cacheiro
has written these units.

Commit count: 42

cargo fmt