From d2bb0ad344749b7c581c57f6df861520b7ba9ed5 Mon Sep 17 00:00:00 2001 From: Michael Mileusnich <467735+mikemiles-dev@users.noreply.github.com> Date: Sun, 22 Dec 2024 21:01:00 -0600 Subject: [PATCH] chore: more cleanup of datanumber (#99) Co-authored-by: mikemiles-dev --- src/variable_versions/data_number.rs | 38 +++++++++++++--------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/variable_versions/data_number.rs b/src/variable_versions/data_number.rs index 6b7e689..7cdeaf8 100644 --- a/src/variable_versions/data_number.rs +++ b/src/variable_versions/data_number.rs @@ -13,8 +13,8 @@ use std::convert::Into; use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; use std::time::Duration; -macro_rules! impl_try_from_data_number { - ($($t:ty => $v:ident),*) => { +macro_rules! impl_try_from { + ($($t:ty => $v:ident),*; $($s:ty => $sv:ident),*) => { $( impl TryFrom<&DataNumber> for $t { type Error = DataNumberError; @@ -26,13 +26,7 @@ macro_rules! impl_try_from_data_number { } } } - )* - }; -} -macro_rules! impl_try_from_field_value { - ($($t:ty => $v:ident),*) => { - $( impl TryFrom<&FieldValue> for $t { type Error = FieldValueError; @@ -47,6 +41,19 @@ macro_rules! impl_try_from_field_value { } } )* + + $( + impl TryFrom<&FieldValue> for $s { + type Error = FieldValueError; + + fn try_from(value: &FieldValue) -> Result { + match value { + FieldValue::$sv(s) => Ok(s.clone()), + _ => Err(FieldValueError::InvalidDataType), + } + } + } + )* }; } @@ -69,22 +76,13 @@ pub enum DataNumberError { InvalidDataType, } -impl_try_from_data_number!( +impl_try_from!( u8 => U8, u16 => U16, u32 => U32, i32 => I32, u64 => U64, - u128 => U128 -); - -impl_try_from_field_value!( - u8 => DataNumber, - u16 => DataNumber, - u32 => DataNumber, - i32 => DataNumber, - u64 => DataNumber, - u128 => DataNumber + u128 => U128; ); impl TryFrom<&FieldValue> for String { @@ -298,7 +296,7 @@ impl FieldValue { pub fn to_be_bytes(&self) -> Vec { match self { FieldValue::String(s) => s.as_bytes().to_vec(), - FieldValue::DataNumber(d) => d.to_be_bytes().to_vec(), + FieldValue::DataNumber(d) => d.to_be_bytes(), FieldValue::Float64(f) => f.to_be_bytes().to_vec(), FieldValue::Duration(d) => (d.as_secs() as u32).to_be_bytes().to_vec(), FieldValue::Ip4Addr(ip) => ip.octets().to_vec(),