cognite/dto/data_modeling/
common.rs1use std::collections::HashMap;
2
3use derivative::Derivative;
4use serde::{Deserialize, Serialize};
5use serde_with::skip_serializing_none;
6
7use crate::{models::views::ViewReference, PropertyIdentifier};
8
9#[derive(Serialize, Deserialize, Clone, Debug)]
10#[serde(rename_all = "camelCase")]
11pub struct ItemId {
13 pub space: String,
15 pub external_id: String,
17}
18
19#[skip_serializing_none]
20#[derive(Serialize, Deserialize, Clone, Debug)]
21#[serde(rename_all = "camelCase")]
22pub struct ItemIdOptionalVersion {
24 pub space: String,
26 pub external_id: String,
28 pub version: Option<String>,
30}
31
32#[derive(Serialize, Deserialize, Clone, Debug)]
33#[serde(rename_all = "camelCase", tag = "type")]
34pub enum SourceReference {
36 View(ViewReference),
38 Container(ItemId),
40}
41
42#[derive(Serialize, Deserialize, Clone, Debug)]
43#[serde(rename_all = "camelCase", tag = "type")]
44pub struct SourcePropertyReference {
46 pub source: SourceReference,
48 pub identifier: String,
50}
51
52#[derive(Serialize, Deserialize, Clone, Debug)]
53#[serde(rename_all = "camelCase")]
54pub struct SpaceId {
56 pub space: String,
58}
59
60#[derive(Serialize, Deserialize, Clone, Debug)]
61#[serde(rename_all = "camelCase", tag = "type")]
62pub enum TaggedViewReference {
64 View(ViewReference),
66}
67
68impl From<ViewReference> for TaggedViewReference {
69 fn from(value: ViewReference) -> Self {
70 Self::View(value)
71 }
72}
73
74#[derive(Serialize, Deserialize, Clone, Debug)]
75#[serde(rename_all = "camelCase", tag = "type")]
76pub enum TaggedContainerReference {
78 Container(ItemId),
80}
81
82impl TaggedContainerReference {
83 pub fn new(space: impl Into<String>, external_id: impl Into<String>) -> Self {
85 Self::Container(ItemId {
86 space: space.into(),
87 external_id: external_id.into(),
88 })
89 }
90}
91
92impl From<ItemId> for TaggedContainerReference {
93 fn from(value: ItemId) -> Self {
94 Self::Container(value)
95 }
96}
97
98#[derive(Serialize, Deserialize, Clone, Debug, Default)]
99#[serde(rename_all = "camelCase")]
100pub enum UsedFor {
102 #[default]
103 Node,
105 Edge,
107 Record,
109 All,
111}
112
113#[skip_serializing_none]
114#[derive(Default, Serialize, Deserialize, Derivative, Clone, Debug)]
115#[serde(rename_all = "camelCase")]
116pub struct TextProperty {
118 #[derivative(Default(value = "false"))]
119 pub list: Option<bool>,
121 pub collation: Option<String>,
123 pub max_list_size: Option<i32>,
125 pub max_text_size: Option<i32>,
127}
128
129#[skip_serializing_none]
130#[derive(Serialize, Deserialize, Derivative, Clone, Debug)]
131#[serde(rename_all = "camelCase")]
132pub struct UnitReference {
134 pub external_id: String,
136 pub source_unit: Option<String>,
138}
139
140#[skip_serializing_none]
141#[derive(Default, Serialize, Deserialize, Derivative, Clone, Debug)]
142#[serde(rename_all = "camelCase")]
143pub struct PrimitiveProperty {
145 #[derivative(Default(value = "false"))]
146 pub list: Option<bool>,
148 pub unit: Option<UnitReference>,
152 pub max_list_size: Option<i32>,
154}
155
156#[skip_serializing_none]
157#[derive(Serialize, Deserialize, Default, Clone, Debug)]
158#[serde(rename_all = "camelCase")]
159pub struct EnumValueDescription {
161 pub name: Option<String>,
163 pub description: Option<String>,
165}
166
167#[skip_serializing_none]
168#[derive(Serialize, Deserialize, Default, Clone, Debug)]
169#[serde(rename_all = "camelCase")]
170pub struct EnumProperty {
172 pub unknown_value: Option<String>,
174 pub values: HashMap<String, EnumValueDescription>,
176}
177
178#[skip_serializing_none]
179#[derive(Serialize, Deserialize, Derivative, Clone, Debug)]
180#[serde(rename_all = "camelCase")]
181pub struct CDFExternalIdReference {
183 #[derivative(Default(value = "false"))]
184 pub list: Option<bool>,
186 pub max_list_size: Option<i32>,
188}
189
190#[derive(Serialize, Deserialize, Clone, Debug, Default)]
191#[serde(rename_all = "camelCase")]
192pub enum SortDirection {
194 #[default]
195 Ascending,
197 Descending,
199}
200
201#[skip_serializing_none]
202#[derive(Serialize, Deserialize, Clone, Debug)]
203#[serde(rename_all = "camelCase")]
204pub struct PropertySort {
206 pub property: Vec<String>,
208 pub direction: Option<SortDirection>,
210 pub nulls_first: Option<bool>,
212}
213
214impl PropertySort {
215 pub fn new(
223 property: impl PropertyIdentifier,
224 direction: SortDirection,
225 nulls_first: bool,
226 ) -> Self {
227 Self {
228 property: property.into_identifier(),
229 direction: Some(direction),
230 nulls_first: Some(nulls_first),
231 }
232 }
233}