Source code
Revision control
Copy as Markdown
Other Tools
[![Build Status](https://github.com/paholg/typenum/actions/workflows/check.yml/badge.svg)](https://github.com/paholg/typenum/actions/workflows/check.yml)
Typenum
=====
Typenum is a Rust library for type-level numbers evaluated at compile time. It
currently supports bits, unsigned integers, and signed integers.
Typenum depends only on libcore, and so is suitable for use on any platform!
### Importing
While `typenum` is divided into several modules, they are all re-exported
through the crate root, so you can import anything contained herein with `use
typenum::whatever;`, ignoring the crate structure.
You may also find it useful to treat the `consts` module as a prelude, perfoming
a glob import.
### Example
Here is a trivial example of `typenum`'s use:
```rust
use typenum::{Sum, Exp, Integer, N2, P3, P4};
type X = Sum<P3, P4>;
assert_eq!(<X as Integer>::to_i32(), 7);
type Y = Exp<N2, P3>;
assert_eq!(<Y as Integer>::to_i32(), -8);
```
For a non-trivial example of its use, see one of the crates that depends on
it. The full list is
type checking for arbitrary unit systems and
whose length you can generically refer to.
### Error messages
Typenum's error messages aren't great, and can be difficult to parse. The good
news is that the fine folks at Auxon have written a tool to help with it. Please
### License
Licensed under either of
* Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or
* MIT license
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.