Auto merge of #130829 - Urgau:option_array_transpose, r=ibraheemdev · qinheping/verify-rust-std@a7d53da (original) (raw)

Original file line number Diff line number Diff line change
@@ -2543,3 +2543,27 @@ impl Option<Option> {
2543 2543 }
2544 2544 }
2545 2545 }
2546 +
2547 +impl<T, const N: usize> [Option<T>; N] {
2548 +/// Transposes a `[Option; N]` into a `Option<[T; N]>`.
2549 + ///
2550 + /// # Examples
2551 + ///
2552 + /// ```
2553 + /// #![feature(option_array_transpose)]
2554 + /// # use std::option::Option;
2555 + ///
2556 + /// let data = [Some(0); 1000];
2557 + /// let data: Option<[u8; 1000]> = data.transpose();
2558 + /// assert_eq!(data, Some([0; 1000]));
2559 + ///
2560 + /// let data = [Some(0), None];
2561 + /// let data: Option<[u8; 2]> = data.transpose();
2562 + /// assert_eq!(data, None);
2563 + /// ```
2564 + #[inline]
2565 +#[unstable(feature = "option_array_transpose", issue = "130828")]
2566 +pub fn transpose(self) -> Option<[T; N]> {
2567 +self.try_map(core::convert::identity)
2568 +}
2569 +}