blackjack/series/
variants.rs

1//! Variations of `Series` and various helper objects
2
3use crate::prelude::*;
4
5/// Enum for holding valid Series types
6pub enum GenericSeriesContainer {
7    /// Hold `i64` type series
8    I64(Series<i64>),
9    /// Hold `f64` type series
10    F64(Series<f64>),
11    /// Hold `i32` type series
12    I32(Series<i32>),
13    /// Hold `f32` type series
14    F32(Series<f32>),
15    /// Hold `String` type series
16    STRING(Series<String>),
17}
18
19impl GenericSeriesContainer {
20    /// Convert a `GenericSeriesContainer` into a `Vec<String>`
21    pub fn into_string_vec(self) -> Vec<String> {
22        // TODO: `.unwrap()` is pretty safe here, but should avoid it anyhow.
23        match self {
24            GenericSeriesContainer::I64(series) => series.into_type::<String>().unwrap().into_vec(),
25            GenericSeriesContainer::F64(series) => series.into_type::<String>().unwrap().into_vec(),
26            GenericSeriesContainer::I32(series) => series.into_type::<String>().unwrap().into_vec(),
27            GenericSeriesContainer::F32(series) => series.into_type::<String>().unwrap().into_vec(),
28            GenericSeriesContainer::STRING(series) => series.into_vec(),
29        }
30    }
31}
32
33/// Serialized version of `Series<T>`, enabling storage inside a homogeneous container
34/// where metadata is stored and data is stored in byte/compressed format.
35#[derive(Debug, Clone)]
36pub struct SeriesMeta {
37    /// Name of a `Series`
38    pub name: String,
39    /// The length of a `Series`
40    pub len: usize,
41    /// The `DType` of a `Series`
42    pub dtype: DType,
43}
44
45impl<T: BlackJackData> From<&Series<T>> for SeriesMeta {
46    fn from(series: &Series<T>) -> SeriesMeta {
47        SeriesMeta {
48            name: series.name().unwrap(),
49            len: series.len(),
50            dtype: series.dtype().unwrap(),
51        }
52    }
53}