use crate::{DataType, Value};
use super::timed::Timed;
#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct Standard {
pub columns: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub time: Option<f64>,
pub types: Vec<DataType>,
pub values: Vec<Vec<Value>>,
}
impl Timed for Standard {
fn time(&self) -> Option<f64> {
self.time
}
}
impl Standard {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn push_column(mut self, col: &str) -> Self {
self.columns.push(col.to_string());
self
}
#[must_use]
pub fn push_type(mut self, t: DataType) -> Self {
self.types.push(t);
self
}
#[must_use]
pub fn push_value(mut self, v: Value, value_index: usize) -> Self {
if let Some(values) = self.values.get_mut(value_index) {
values.push(v);
}
self
}
#[must_use]
pub fn push_values(mut self, v: Vec<Value>) -> Self {
self.values.push(v);
self
}
}