padded-number

Crates.iopadded-number
lib.rspadded-number
version
sourcesrc
created_at2025-03-09 10:28:47.988445+00
updated_at2025-03-15 13:07:30.660601+00
descriptionWork with numbers containing significant leading zeros
homepage
repositoryhttps://github.com/gibbz00/padded-number
max_upload_size
id1585337
Cargo.toml error:TOML parse error at line 19, column 1 | 19 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Gabriel Hansson (gibbz00)

documentation

README

padded-number - For numbers containing significant leading zeros

ci_status codecov license crates_io docs_rs

Used when "0" and "00" should be considered as distinct values. Encapsulated in an efficient PaddedNumber type with, length bounds, ordering, and arithmetic features included.

use padded_number::padded_number;

// macro creates a valid `PaddedNumber` at compile time
assert_eq!(padded_number!("001"), padded_number!("001"));
assert_ne!(padded_number!("0"), padded_number!("00"));

Length bounds

use std::str::FromStr;
use padded_number::{PaddedNumber, bound_padded_number};

let from_macro = bound_padded_number!(2, 3, "123");
let from_str = PaddedNumber::<2, 3>::from_str("123").unwrap();
assert_eq!(from_macro, from_str);

// try_new is const fn compared to `FromStr`
assert!(PaddedNumber::<2, 3>::try_new("0").is_err());
assert!(PaddedNumber::<2, 3>::try_new("0000").is_err());

Ordering

use padded_number::padded_number;

let a = padded_number!("0");
let b = padded_number!("00");
assert!(a < b);

let u = padded_number!("10");
let v = padded_number!("001");
assert!(u < v);

Addition and subtraction with u64 as right-hand-side

Zeros being their own step is required to make padded number arithmetic consistent.

use padded_number::padded_number;

assert_eq!(
  padded_number!("9") + 1,
  padded_number!("00")
);

assert_eq!(
  padded_number!("000") - 1,
  padded_number!("99")
);

Feature flags

All are disabled by default.

  • macros - Enables the padded_number! and bound_padded_number! macros.
  • serde - Enables serde support for PaddedNumber. Serialization is done to and from a plain string.
  • unstable-nightly - Enables methods on PaddedNumber which in turn rely on the unstable generic_const_exprs feature.
Commit count: 0

cargo fmt