diff --git a/src/primitives.rs b/src/primitives.rs index f388b0d..900e883 100644 --- a/src/primitives.rs +++ b/src/primitives.rs @@ -115,64 +115,41 @@ impl Versionize for String { } } -macro_rules! impl_versionize_array_with_size { - ($ty:literal) => { - impl Versionize for [T; $ty] - where - T: Copy + Default + Versionize, - { - #[inline] - fn serialize( - &self, - writer: &mut W, - version_map: &VersionMap, - app_version: u16, - ) -> VersionizeResult<()> { - for element in self { - element.serialize(writer, version_map, app_version)?; - } - - Ok(()) - } +impl Versionize for [T; N] +where + T: Copy + Default + Versionize, +{ + #[inline] + fn serialize( + &self, + writer: &mut W, + version_map: &VersionMap, + app_version: u16, + ) -> VersionizeResult<()> { + for element in self { + element.serialize(writer, version_map, app_version)?; + } - #[inline] - fn deserialize( - reader: &mut R, - version_map: &VersionMap, - app_version: u16, - ) -> VersionizeResult { - let mut array = [T::default(); $ty]; - for i in 0..$ty { - array[i] = T::deserialize(reader, version_map, app_version)?; - } - Ok(array) - } + Ok(()) + } - // Not used yet. - fn version() -> u16 { - 1 - } + #[inline] + fn deserialize( + reader: &mut R, + version_map: &VersionMap, + app_version: u16, + ) -> VersionizeResult { + let mut array = [T::default(); N]; + for elem in &mut array { + *elem = T::deserialize(reader, version_map, app_version)?; } - }; -} - -// Conventionally, traits are available for primitive arrays only up to size 32 -// until the const generics feature is implemented. -// [https://doc.rust-lang.org/std/primitive.array.html] -// [https://github.com/rust-lang/rust/issues/44580] -macro_rules! impl_versionize_arrays { - ($($N:literal)+) => { - $( - impl_versionize_array_with_size!($N); - )+ + Ok(array) } -} -impl_versionize_arrays! { - 1 2 3 4 5 6 7 8 9 10 - 11 12 13 14 15 16 17 18 19 20 - 21 22 23 24 25 26 27 28 29 30 - 31 32 + // Not used yet. + fn version() -> u16 { + 1 + } } impl Versionize for Box diff --git a/src/version_map.rs b/src/version_map.rs index 7fbc56e..9cfc1e4 100644 --- a/src/version_map.rs +++ b/src/version_map.rs @@ -89,7 +89,7 @@ pub struct VersionMap { impl Default for VersionMap { fn default() -> Self { VersionMap { - versions: vec![HashMap::new(); 1], + versions: vec![HashMap::new()], filter: Arc::new(()), } } @@ -104,7 +104,7 @@ impl VersionMap { /// Create a new version map with specified version filter. pub fn with_filter(filter: Arc) -> Self { VersionMap { - versions: vec![HashMap::new(); 1], + versions: vec![HashMap::new()], filter, } }