diff --git a/tools/kv_typed/src/from_bytes.rs b/tools/kv_typed/src/from_bytes.rs index 5ae7245145392833eff049abd148b0fe5fb8c025..6cade2d4b8b7c78d51545ea9efb20e188682ad49 100644 --- a/tools/kv_typed/src/from_bytes.rs +++ b/tools/kv_typed/src/from_bytes.rs @@ -55,23 +55,19 @@ impl FromBytes for String { } } -macro_rules! impl_from_bytes_for_smallvec { - ($($N:literal),*) => {$( - impl<T> FromBytes for SmallVec<[T; $N]> - where - T: Copy + zerocopy::FromBytes, - { - type Err = LayoutVerifiedErr; +impl<T, const N: usize> FromBytes for SmallVec<[T; N]> +where + T: Copy + zerocopy::FromBytes, + [T; N]: smallvec::Array<Item = T>, +{ + type Err = LayoutVerifiedErr; - fn from_bytes(bytes: &[u8]) -> Result<Self, Self::Err> { - let layout_verified = zerocopy::LayoutVerified::<_, [T]>::new_slice(bytes) - .ok_or_else(|| LayoutVerifiedErr(stringify!(T)).into())?; - Ok(SmallVec::from_slice(layout_verified.into_slice())) - } - } - )*}; + fn from_bytes(bytes: &[u8]) -> Result<Self, Self::Err> { + let layout_verified = zerocopy::LayoutVerified::<_, [T]>::new_slice(bytes) + .ok_or(LayoutVerifiedErr(stringify!(T)))?; + Ok(SmallVec::from_slice(layout_verified.into_slice())) + } } -impl_from_bytes_for_smallvec!(1, 2, 4, 8, 16, 32, 64); impl<T> FromBytes for Vec<T> where