qust_ds/
df.rs

1#![allow(non_camel_case_types, unused_imports)]
2use itertools::Itertools;
3use super::types::*;
4
5#[derive(Clone)]
6pub enum Series {
7    date(Vec<da>),
8    datetime(Vec<dt>),
9    time(Vec<tt>),
10    f32(Vec<f32>),
11}
12
13pub struct Df<T> {
14    pub index: T,
15    pub value: Vec<Series>,
16    pub column: Vec<&'static str>,
17}
18
19use std::ops::Add;
20use std::iter::{Map, Zip};
21use std::vec::IntoIter; 
22
23/* #region  */
24
25pub struct MyVec1(Vec<f32>);
26
27impl Add for MyVec1 {
28    type Output = Map<Zip<IntoIter<f32>, IntoIter<f32>>, fn((f32, f32)) -> f32>;
29    fn add(self, rhs: MyVec1) -> Self::Output {
30        self.0.into_iter().zip(rhs.0).map(|(x, y)| x + y)
31    }
32}
33
34
35
36/* #endregion */
37
38impl Add<&Self> for Series {
39    type Output = Series;
40    fn add(self, rhs: &Self) -> Self::Output {
41        if let (Series::f32(mut data1), Series::f32(data2)) = (self, rhs) {
42            data1.iter_mut()
43                .zip(data2.iter())
44                .for_each(|(x, y)| *x += y);
45            Series::f32(data1)
46        } else {
47            panic!("dddd")
48        }
49    }
50}
51
52impl Add<f32> for Series {
53    type Output = Series;
54    fn add(self, rhs: f32) -> Self::Output {
55        if let Series::f32(mut data1) = self {
56            data1.iter_mut()
57                .for_each(|x| *x += rhs);
58            Series::f32(data1)
59        } else {
60            panic!("dddd")
61        }
62    }
63}
64
65impl FromIterator<f32> for Series {
66    fn from_iter<T: IntoIterator<Item = f32>>(iter: T) -> Self {
67        let mut res_vec = vec![];
68        for x in iter {
69            res_vec.push(x);
70        }
71        Series::f32(res_vec)
72    }
73}
74
75impl Series {
76    pub fn iter(&self) -> std::slice::Iter<'_, f32> {
77        if let Series::f32(data) = self {
78            data.iter()
79        } else {
80            panic!("expect f32")
81        }
82    }
83}