small_len 0.3.7

A small library for storing the length in the smallest internal type.
Documentation
# small_len

A simple enum and trait to ensure that the value returned by small_len() is always the smallest representation. This is 
meant to be used by [fn_vm](https://docs.rs/fn_vm/latest/fn_vm/) to support "infinite" commands, arguments, and registers.

NOTE: This is primarily meant for dynamic sized objects, String, [T], &[T], Vec, HashMap, and IndexMap (with feature 
indexmap); if you need an optimization for static bounds at compile time check out the 
[smallnum](https://docs.rs/smallnum/latest/smallnum/) crate.

## Usage

```rust
use small_len::SmallLen;

fn main() {
    let a = vec![1, 2, 3];
    let c = a.small_len(); // Length::Byte(3)
    let bytes = c.to_be_bytes();
    let c = SmallLen::from_be_bytes(&bytes); // SmallLen::from_bytes() -> Length::Byte(3)
}
```

## Features

- `default`: No extra features, includes Vec<T> and HashMap<K, V> implementations.
- `bumpalo`: Adds `Len` implementation for `bumpalo::Bump`.
- `bytes`: Adds `Len` implementation for `bytes::Bytes` and `bytes::BytesMut`.
- `indexmap`: Adds `Len` implementation for `indexmap::IndexMap`.

## Custom Types

If you need to add SmallLen to another type, you can implement the Len trait.

```rust
impl <T> Len for Vec<T> {
    #[inline]
    fn length(&self) -> usize {
        self.len()
    }
}
```

## Additional Traits
The Length enum also implements the following traits for easier use:
- Index for Vec<T>, this will panic if the index is out of bounds
- Add<usize> -> usize
- Div<usize> -> usize
- Mul<usize> -> usize
- Rem<usize> -> usize
- Sub<usize> -> usize