4 releases
0.1.3 | Oct 4, 2024 |
---|---|
0.1.2 | Mar 23, 2024 |
0.1.1 | Feb 25, 2024 |
0.1.0 | Feb 25, 2024 |
#1063 in Parser implementations
28KB
737 lines
Typed Bytesize
The library provides two types to represent bytesize:
- ByteSizeSi for decimal prefix unit (SI)
- ByteSizeIec for binary prefix unit (IEC 80000-13)
Functions
- Bytesize types can parse each other's units (e.g.
ByteSizeIec
can parse SI values like114514GB
); - 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 support.
Example
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.
BNF
Parsing follows the rule:
expr ::= num | term
term ::= decimal " "* unit
decimal ::= num | float
float ::= num "." num
num ::= [0-9]+
Features
serde
: enable serde onByteSizeSi
andByteSizeIec
.u128
: useu128
instead ofu64
as inner numeric type to support larger units. (TODO)
Dependencies
~160KB