mod filter;
mod synthetic;
pub use self::filter::*;
pub use self::synthetic::*;
use crate::models::instances::CogniteTimeseries;
use crate::models::instances::InstanceId;
use crate::IntoPatch;
use crate::IntoPatchItem;
use crate::UpsertOptions;
use crate::{EqIdentity, Identity, Patch, UpdateList, UpdateMap, UpdateSet, UpdateSetNull};
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use std::collections::HashMap;
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
pub struct TimeSeries {
pub id: i64,
pub external_id: Option<String>,
pub instance_id: Option<InstanceId>,
pub name: Option<String>,
pub is_string: bool,
pub metadata: Option<HashMap<String, String>>,
pub unit: Option<String>,
pub unit_external_id: Option<String>,
pub asset_id: Option<i64>,
pub is_step: bool,
pub description: Option<String>,
pub security_categories: Option<Vec<i64>>,
pub created_time: i64,
pub last_updated_time: i64,
pub data_set_id: Option<i64>,
}
#[skip_serializing_none]
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
pub struct AddTimeSeries {
pub external_id: Option<String>,
pub name: Option<String>,
pub is_string: bool,
pub metadata: Option<HashMap<String, String>>,
pub unit: Option<String>,
pub unit_external_id: Option<String>,
pub asset_id: Option<i64>,
pub is_step: bool,
pub description: Option<String>,
pub security_categories: Option<Vec<i64>>,
pub data_set_id: Option<i64>,
}
pub enum AddDmOrTimeSeries {
TimeSeries(Box<AddTimeSeries>),
Cdm(Box<CogniteTimeseries>),
}
impl From<TimeSeries> for AddTimeSeries {
fn from(time_serie: TimeSeries) -> AddTimeSeries {
AddTimeSeries {
name: time_serie.name,
external_id: time_serie.external_id,
is_string: time_serie.is_string,
metadata: time_serie.metadata,
unit: time_serie.unit,
unit_external_id: time_serie.unit_external_id,
asset_id: time_serie.asset_id,
is_step: time_serie.is_step,
description: time_serie.description,
security_categories: time_serie.security_categories,
data_set_id: time_serie.data_set_id,
}
}
}
impl EqIdentity for AddTimeSeries {
fn eq(&self, id: &Identity) -> bool {
match id {
Identity::Id { id: _ } => false,
Identity::ExternalId { external_id } => self.external_id.as_ref() == Some(external_id),
}
}
}
#[skip_serializing_none]
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
#[serde(rename_all = "camelCase")]
pub struct PatchTimeSeries {
pub name: Option<UpdateSetNull<String>>,
pub external_id: Option<UpdateSetNull<String>>,
pub metadata: Option<UpdateMap<String, String>>,
pub unit: Option<UpdateSetNull<String>>,
pub unit_external_id: Option<UpdateSetNull<String>>,
pub asset_id: Option<UpdateSetNull<i64>>,
pub description: Option<UpdateSetNull<String>>,
pub security_categories: Option<UpdateList<i64, i64>>,
pub data_set_id: Option<UpdateSetNull<i64>>,
pub is_step: Option<UpdateSet<bool>>,
}
impl IntoPatch<Patch<PatchTimeSeries>> for TimeSeries {
fn patch(self, options: &UpsertOptions) -> Patch<PatchTimeSeries> {
Patch::<PatchTimeSeries> {
id: to_idt!(self),
update: PatchTimeSeries {
name: self.name.patch(options),
external_id: self.external_id.patch(options),
metadata: self.metadata.patch(options),
unit: self.unit.patch(options),
unit_external_id: self.unit_external_id.patch(options),
asset_id: self.asset_id.patch(options),
description: self.description.patch(options),
security_categories: self.security_categories.patch(options),
data_set_id: self.data_set_id.patch(options),
is_step: self.is_step.patch(options),
},
}
}
}
impl IntoPatch<PatchTimeSeries> for AddTimeSeries {
fn patch(self, options: &UpsertOptions) -> PatchTimeSeries {
PatchTimeSeries {
name: self.name.patch(options),
external_id: self.external_id.patch(options),
metadata: self.metadata.patch(options),
unit: self.unit.patch(options),
unit_external_id: self.unit_external_id.patch(options),
asset_id: self.asset_id.patch(options),
description: self.description.patch(options),
security_categories: self.security_categories.patch(options),
data_set_id: self.data_set_id.patch(options),
is_step: self.is_step.patch(options),
}
}
}
impl From<TimeSeries> for Patch<PatchTimeSeries> {
fn from(time_serie: TimeSeries) -> Patch<PatchTimeSeries> {
IntoPatch::<Patch<PatchTimeSeries>>::patch(time_serie, &Default::default())
}
}