typed-bytesize

Crates.iotyped-bytesize
lib.rstyped-bytesize
version0.1.3
sourcesrc
created_at2024-02-25 05:27:07.543988
updated_at2024-10-04 08:44:10.540416
descriptionRepresent bytesize in decimal or binary prefix unit
homepage
repositoryhttps://github.com/TD-Sky/typed-bytesize
max_upload_size
id1152200
size28,519
Collide (TD-Sky)

documentation

https://docs.rs/typed-bytesize

README

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)
Commit count: 9

cargo fmt