4 releases (breaking)
Uses new Rust 2024
new 0.4.1 | Mar 10, 2025 |
---|---|
0.4.0 |
|
0.3.0 | Mar 10, 2025 |
0.2.0 | Mar 9, 2025 |
0.1.0 | Mar 9, 2025 |
#342 in Math
104 downloads per month
45KB
681 lines
padded-number
- For numbers containing significant leading zeros
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 thepadded_number!
andbound_padded_number!
macros.serde
- Enables serde support forPaddedNumber
. Serialization is done to and from a plain string.unstable-nightly
- Enables methods onPaddedNumber
which in turn rely on the unstablegeneric_const_exprs
feature.
Dependencies
~1.3–1.9MB
~35K SLoC