cognite/dto/data_modeling/
records.rs1pub(crate) mod aggregates;
2
3use serde::{Deserialize, Serialize};
4use serde_with::skip_serializing_none;
5
6use crate::{time_series::TimestampOrRelative, AdvancedFilter, PropertyIdentifier};
7
8use super::{
9 common::{SortDirection, TaggedContainerReference},
10 instances::PropertiesObject,
11};
12
13#[skip_serializing_none]
19#[derive(Debug, Default, Clone, Serialize, Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub struct LastUpdatedTimeFilter {
22 pub gte: Option<TimestampOrRelative>,
24 pub gt: Option<TimestampOrRelative>,
26 pub lte: Option<TimestampOrRelative>,
28 pub lt: Option<TimestampOrRelative>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase")]
34pub struct RecordData<TProperties> {
38 pub source: TaggedContainerReference,
40 pub properties: TProperties,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub struct RecordWrite<TProperties> {
48 pub space: String,
50 pub external_id: String,
52 pub sources: Vec<RecordData<TProperties>>,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
57#[serde(rename_all = "camelCase")]
58pub struct Record<TProperties> {
62 pub space: String,
64 pub external_id: String,
66 pub properties: PropertiesObject<TProperties>,
69 pub created_time: i64,
71 pub last_updated_time: i64,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct PropertiesPerContainer {
79 pub source: TaggedContainerReference,
81 pub properties: Vec<String>,
83}
84
85#[skip_serializing_none]
86#[derive(Serialize, Deserialize, Clone, Debug)]
87#[serde(rename_all = "camelCase")]
88pub struct RecordsPropertySort {
90 pub property: Vec<String>,
92 pub direction: Option<SortDirection>,
94}
95
96impl RecordsPropertySort {
97 pub fn new(property: impl PropertyIdentifier, direction: SortDirection) -> Self {
104 Self {
105 property: property.into_identifier(),
106 direction: Some(direction),
107 }
108 }
109}
110
111#[skip_serializing_none]
112#[derive(Debug, Clone, Serialize, Deserialize)]
113#[serde(rename_all = "camelCase")]
114pub struct RecordsRetrieveRequest {
116 pub last_updated_time: LastUpdatedTimeFilter,
118 pub filter: Option<AdvancedFilter>,
120 pub sources: Option<Vec<PropertiesPerContainer>>,
122 pub limit: Option<u32>,
124 pub sort: Option<Vec<RecordsPropertySort>>,
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize)]
129#[serde(rename_all = "camelCase")]
130pub enum RecordCursor {
132 Cursor(String),
134 InitializeCursor(String),
137}
138
139#[skip_serializing_none]
140#[derive(Debug, Clone, Serialize, Deserialize)]
141#[serde(rename_all = "camelCase")]
142pub struct RecordsSyncRequest {
144 pub sources: Option<Vec<PropertiesPerContainer>>,
146 pub filter: Option<AdvancedFilter>,
148 pub limit: Option<u32>,
150 #[serde(flatten)]
152 pub cursor: RecordCursor,
153}
154
155#[derive(Debug, Clone, Serialize, Deserialize)]
156#[serde(rename_all = "camelCase")]
157pub struct CursorAndHasNext {
159 pub next_cursor: String,
161 pub has_next: bool,
165}