From 61cf82bc65a3d7f256489a1cabfc6a1a973231d3 Mon Sep 17 00:00:00 2001 From: Vladislav Golub Date: Fri, 8 Nov 2019 18:48:26 +0300 Subject: [PATCH] Add conversion to u64 --- src/lib.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 198e58e..7e072fa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -78,6 +78,25 @@ impl From for Eui64 { } } +impl From for u64 { + fn from(eui48: Eui48) -> Self { + let data = eui48.0; + + ((data[0] as u64) << 40) + + ((data[1] as u64) << 32) + + ((data[2] as u64) << 24) + + ((data[3] as u64) << 16) + + ((data[4] as u64) << 8) + + ((data[5] as u64) << 0) + } +} + +impl From for u64 { + fn from(eui64: Eui64) -> Self { + u64::from_be_bytes(eui64.0) + } +} + impl Display for Eui48 { fn fmt(&self, f: &mut Formatter) -> Result<(), Error> { write!(f, "{}", self.to_string()) @@ -111,3 +130,15 @@ fn test_eui48_to_eui64() { assert_eq!(eui64.to_string(), "4d7e540000972eef") } + +#[test] +fn test_u64_from_eui48() { + let eui48 = Eui48::from(85204980412143); + assert_eq!(u64::from(eui48), 85204980412143); +} + +#[test] +fn test_u64_from_eui64() { + let eui64 = Eui64::from(5583992946972634863); + assert_eq!(u64::from(eui64), 5583992946972634863); +}