Skip to content

Represent bytesize in decimal or binary prefix unit

License

Notifications You must be signed in to change notification settings

TD-Sky/typed-bytesize

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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)

About

Represent bytesize in decimal or binary prefix unit

Resources

License

Stars

Watchers

Forks

Packages

No packages published