Crate typed_bytesize

source ·
Expand description

§Typed Bytesize

crates.io docs.rs check test

The library provides two types to represent bytesize:

§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 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 on ByteSizeSi and ByteSizeIec.
  • u128: use u128 instead of u64 as inner numeric type to support larger units. (TODO)

Structs§

Enums§

Constants§

  • 1 byte
  • 1 exabyte
  • 1 exbibyte
  • 1 gigabyte
  • 1 gibibyte
  • 1 kilobyte
  • 1 kibibyte
  • 1 megabyte
  • 1 mebibyte
  • 1 petabyte
  • 1 pebibyte
  • 1 terabyte
  • 1 tebibyte