# tlnat
This project is essentially a stop-gap until the
rust team implements generics that can be parameterized
by values. The infrastructure exists to define other
types of objects, but currently the only implemented values
are natural numbers 0 through 2048.
author: Dalton Woodard
contact: daltonmwoodard@gmail.com
license: MIT License (c) 2016 by Dalton Woodard
## Build info
tlnat requires usage of `feature(associated_consts)` and
`feature(const_fn)`.
## Example usage
The types each have the format of `_n` for some number `n >= 0`, along
with the associated constant `_n::VALUE` which satisfies `_n::VALUE == n`.
Each type provided implements the associated constant `VALUE` and the function
```rust
pub const fn evaluate () -> T;
```
which always returns `VALUE`.
There are traits `IntegralConstant` `UnsignedIntegralConstant`, the latter of
which all default types `_n` implement.
To define new such types the macros `integral_constant!` and
`unsigned_integral_constant!` are provided, which take
`($name : ident, $val : expr)` as arguments; the types provided by default were
created, for example, by invocation of `unsigned_integral_constant!(_0, 0);`.
## Known issues:
Currently using `_n::VALUE`, although it is indeed a compile-time constant,
to specify the size of a fixed-size array, such as `[u8; _n::VALUE]` does not
compile. I believe it is related to the issue discussed in this issue:
https://github.com/rust-lang/rust/issues/25145
## Misc.
If your project uses tlnat please feel free to make a pull request to add to the
following list.
Projects using tlnat: