typed-bytesize 0.1.1

Represent bytesize in decimal or binary prefix unit
Documentation
# Typed Bytesize

[![crates.io](https://img.shields.io/crates/v/typed-bytesize.svg)](https://crates.io/crates/typed-bytesize)
[![docs.rs](https://docs.rs/typed-bytesize/badge.svg)](https://docs.rs/typed-bytesize/)
[![check](https://github.com/TD-Sky/typed-bytesize/actions/workflows/check.yml/badge.svg)](https://github.com/TD-Sky/typed-bytesize/actions/workflows/check.yml)
[![test](https://github.com/TD-Sky/typed-bytesize/actions/workflows/test.yml/badge.svg)](https://github.com/TD-Sky/typed-bytesize/actions/workflows/test.yml)

The library provides two types to represent bytesize:
- [ByteSizeSi]https://docs.rs/typed-bytesize/latest/typed_bytesize/struct.ByteSizeSi.html for **decimal** prefix unit ([SI]https://en.wikipedia.org/wiki/International_System_of_Units)
- [ByteSizeIec]https://docs.rs/typed-bytesize/latest/typed_bytesize/struct.ByteSizeIec.html for **binary** prefix unit (IEC 80000-13)

## Functions

- Bytesize types can parse each other's units (e.g. `ByteSizeIec` can parse SI values like `114514GB`);
- Bytesize values will only be formatted as the unit has their owned prefix;
- Bytesize types can be converted to each other;
- Supporting *addition*, *subtraction*, *scalar multiplication* arithmetic operations;
- Optional [serde]https://crates.io/crates/serde support.

## Example

```rust
use typed_bytesize::{ByteSizeIec, ByteSizeSi};

// SI
assert_eq!(ByteSizeSi::b(114u64), "114".parse().unwrap());
assert_eq!(ByteSizeSi::mb(114), "114MB".parse().unwrap());
print!("{}", ByteSizeSi::kb(310)); // 310.0kB

// IEC
assert_eq!(ByteSizeIec::b(514u64), "514".parse().unwrap());
assert_eq!(ByteSizeIec::mib(514), "514MiB".parse().unwrap());
print!("{}", ByteSizeIec::gib(93696)); // 91.5GiB
```

For more detailed examples, refer to [tests](https://docs.rs/crate/typed-bytesize/latest/source/src/tests.rs).


## BNF

Parsing follows the rule:

```ignore
expr    ::= num | term
term    ::= decimal " "* unit
decimal ::= num | float
float   ::= num "." num
num     ::= [0-9]+
```


## Features

- `serde`: enable [serde]https://crates.io/crates/serde on `ByteSizeSi` and `ByteSizeIec`.
- `u128`: use `u128` instead of `u64` as inner numeric type to support larger units. (TODO)