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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
use crate::prelude::*; use crate::utils::NoNull; use std::iter::FromIterator; macro_rules! from_iterator { ($native:ty, $variant:ident) => { impl FromIterator<Option<$native>> for Series { fn from_iter<I: IntoIterator<Item = Option<$native>>>(iter: I) -> Self { let ca: ChunkedArray<$variant> = iter.into_iter().collect(); ca.into_series() } } impl FromIterator<$native> for Series { fn from_iter<I: IntoIterator<Item = $native>>(iter: I) -> Self { let ca: NoNull<ChunkedArray<$variant>> = iter.into_iter().collect(); ca.into_inner().into_series() } } impl<'a> FromIterator<&'a $native> for Series { fn from_iter<I: IntoIterator<Item = &'a $native>>(iter: I) -> Self { let ca: ChunkedArray<$variant> = iter.into_iter().map(|v| Some(*v)).collect(); ca.into_series() } } }; } #[cfg(feature = "dtype-u8")] from_iterator!(u8, UInt8Type); #[cfg(feature = "dtype-u16")] from_iterator!(u16, UInt16Type); from_iterator!(u32, UInt32Type); #[cfg(feature = "dtype-u64")] from_iterator!(u64, UInt64Type); #[cfg(feature = "dtype-i8")] from_iterator!(i8, Int8Type); #[cfg(feature = "dtype-i16")] from_iterator!(i16, Int16Type); from_iterator!(i32, Int32Type); from_iterator!(i64, Int64Type); from_iterator!(f32, Float32Type); from_iterator!(f64, Float64Type); from_iterator!(bool, BooleanType); impl<'a> FromIterator<&'a str> for Series { fn from_iter<I: IntoIterator<Item = &'a str>>(iter: I) -> Self { let ca: Utf8Chunked = iter.into_iter().collect(); ca.into_series() } } impl FromIterator<String> for Series { fn from_iter<I: IntoIterator<Item = String>>(iter: I) -> Self { let ca: Utf8Chunked = iter.into_iter().collect(); ca.into_series() } } #[cfg(test)] mod test { use crate::prelude::*; #[test] fn test_iter() { let a = Series::new("age", [23, 71, 9].as_ref()); let _b = a .i32() .unwrap() .into_iter() .map(|opt_v| opt_v.map(|v| v * 2)); } }