Skip to content

Commit a3daf8e

Browse files
committed
feat: impl From primitive numbers for integers
1 parent a3dda37 commit a3daf8e

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

benzina/src/int.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,18 @@ macro_rules! from_numbers {
227227
}
228228
}
229229

230+
macro_rules! from_primitive_numbers {
231+
($($from:ident => $to:ident),*) => {
232+
$(
233+
impl From<$from> for $to {
234+
fn from(value: $from) -> Self {
235+
Self::new(value.into()).unwrap()
236+
}
237+
}
238+
)*
239+
}
240+
}
241+
230242
impl_numbers! {
231243
U15 => u16, i16, SmallInt,
232244
U31 => u32, i32, Integer,
@@ -239,6 +251,15 @@ from_numbers! {
239251
U31 => U63
240252
}
241253

254+
from_primitive_numbers! {
255+
u8 => U15,
256+
u8 => U31,
257+
u8 => U63,
258+
u16 => U31,
259+
u16 => U63,
260+
u32 => U63
261+
}
262+
242263
#[cfg(test)]
243264
mod tests {
244265
use super::{U15, U31, U63};
@@ -381,6 +402,18 @@ mod tests {
381402
assert!(U15::try_from(-1i16).is_err());
382403
}
383404

405+
#[test]
406+
fn test_from_primitive_numbers() {
407+
assert_eq!(U15::new(u8::MAX.into()).unwrap(), u8::MAX.into());
408+
409+
assert_eq!(U31::new(u8::MAX.into()).unwrap(), u8::MAX.into());
410+
assert_eq!(U31::new(u16::MAX.into()).unwrap(), u16::MAX.into());
411+
412+
assert_eq!(U63::new(u8::MAX.into()).unwrap(), u8::MAX.into());
413+
assert_eq!(U63::new(u16::MAX.into()).unwrap(), u16::MAX.into());
414+
assert_eq!(U63::new(u32::MAX.into()).unwrap(), u32::MAX.into());
415+
}
416+
384417
#[test]
385418
fn test_ordering() {
386419
let a = U15::new(100).unwrap();

0 commit comments

Comments
 (0)