/** Given an array of arguments, return them sorted. Best utilised with array destructuring. */ pub fn ordered(mut xs: [T; N]) -> [T; N] { xs.sort(); xs } /** An iterator adaptor (derived from ExactSizedIterator) which has a guaranteed compile time size, allowing for collection of an iterator into a stack allocated array. */ pub trait ExactSizedArr: ExactSizeIterator + Sized where I: Default, { fn into_array(mut self) -> Result<[Self::Item; N], Self> { if self.len() < N { Err(self) } else { Ok(std::array::from_fn(|_| self.next().unwrap())) } } } /** Default implementation of ExactSizedArr for any ExactSizeIterator. */ impl ExactSizedArr for I where T: Default + Copy + Clone, I: ExactSizeIterator, { }