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
use crate::prelude::*; 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 = iter.into_iter().collect(); Series::$variant(ca) } } impl FromIterator<$native> for Series { fn from_iter<I: IntoIterator<Item = $native>>(iter: I) -> Self { let ca = iter.into_iter().map(|v| Some(v)).collect(); Series::$variant(ca) } } impl<'a> FromIterator<&'a $native> for Series { fn from_iter<I: IntoIterator<Item = &'a $native>>(iter: I) -> Self { let ca = iter.into_iter().map(|v| Some(*v)).collect(); Series::$variant(ca) } } }; } from_iterator!(u32, UInt32); from_iterator!(i32, Int32); from_iterator!(i64, Int64); from_iterator!(f32, Float32); from_iterator!(f64, Float64); from_iterator!(bool, Bool); impl<'a> FromIterator<&'a str> for Series { fn from_iter<I: IntoIterator<Item = &'a str>>(iter: I) -> Self { let ca = iter.into_iter().collect(); Series::Utf8(ca) } } #[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)); } }