Skip to content

dominicparga/kissunits

Repository files navigation

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.

About

Different units (like distances or coordinates), keeping it small and simple

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors