From 677b4df01964159cda8f08b7a854307c72c0de7c Mon Sep 17 00:00:00 2001 From: Tony Arcieri Date: Mon, 29 May 2023 21:41:02 -0600 Subject: [PATCH] hybrid-array: impl `Default` for `Array` --- hybrid-array/src/lib.rs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/hybrid-array/src/lib.rs b/hybrid-array/src/lib.rs index 7a0f30e1..abdc9d15 100644 --- a/hybrid-array/src/lib.rs +++ b/hybrid-array/src/lib.rs @@ -244,6 +244,16 @@ where } } +/// Generate a [`TryFromSliceError`] if the slice doesn't match the given length. +fn check_slice_length(slice: &[T]) -> Result<(), TryFromSliceError> { + if slice.len() != U::USIZE { + // Hack: `TryFromSliceError` lacks a public constructor + <&[T; 1]>::try_from([].as_slice())?; + } + + Ok(()) +} + /// Byte array type. pub type ByteArray = Array; @@ -398,6 +408,15 @@ macro_rules! impl_array_size { } } + impl Default for Array + where + T: Default + { + fn default() -> Self { + Self([(); $len].map(|_| T::default())) + } + } + impl IntoIterator for Array { type Item = T; type IntoIter = IntoIter; @@ -512,13 +531,3 @@ impl_array_size! { 4096 => U4096, 8192 => U8192 } - -/// Generate a [`TryFromSliceError`] if the slice doesn't match the given length. -fn check_slice_length(slice: &[T]) -> Result<(), TryFromSliceError> { - if slice.len() != U::USIZE { - // Hack: `TryFromSliceError` lacks a public constructor - <&[T; 1]>::try_from([].as_slice())?; - } - - Ok(()) -}