use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use crate::models::instances::{InstanceId, NodeOrEdgeCreate};
use super::{
common::{CogniteDescribable, CogniteSourceable},
CogniteExtendable, WithInstance, WithView,
};
pub type CogniteTimeseries = CogniteExtendable<Timeseries>;
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "lowercase")]
pub enum TimeSeriesType {
String,
#[default]
Numeric,
}
#[skip_serializing_none]
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct Timeseries {
#[serde(flatten)]
pub description: CogniteDescribable,
#[serde(flatten)]
pub source: CogniteSourceable,
pub is_step: bool,
pub source_unit: String,
pub unit: Option<InstanceId>,
pub assets: Option<Vec<InstanceId>>,
pub activities: Option<Vec<InstanceId>>,
pub r#type: TimeSeriesType,
}
impl Timeseries {
pub fn new(is_step: bool) -> Self {
Self {
is_step,
..Default::default()
}
}
}
impl WithView for Timeseries {
const SPACE: &'static str = "cdf_cdm";
const EXTERNAL_ID: &'static str = "CogniteTimeSeries";
const VERSION: &'static str = "v1";
}
impl From<CogniteTimeseries> for NodeOrEdgeCreate<Timeseries> {
fn from(value: CogniteTimeseries) -> NodeOrEdgeCreate<Timeseries> {
value.instance()
}
}