data_modelling_sdk/import/
mod.rs1pub mod avro;
13#[cfg(feature = "bpmn")]
14pub mod bpmn;
15pub mod cads;
16pub mod decision;
17#[cfg(feature = "dmn")]
18pub mod dmn;
19pub mod json_schema;
20pub mod knowledge;
21pub mod odcl;
22pub mod odcs;
23pub mod odcs_shared;
24pub mod odps;
25#[cfg(feature = "openapi")]
26pub mod openapi;
27pub mod protobuf;
28pub mod sql;
29
30#[derive(Debug, serde::Serialize, serde::Deserialize)]
36#[must_use = "import results should be processed or errors checked"]
37pub struct ImportResult {
38 pub tables: Vec<TableData>,
40 pub tables_requiring_name: Vec<TableRequiringName>,
42 pub errors: Vec<ImportError>,
44 pub ai_suggestions: Option<Vec<serde_json::Value>>,
46}
47
48#[derive(Debug, thiserror::Error, serde::Serialize, serde::Deserialize)]
50pub enum ImportError {
51 #[error("Parse error: {0}")]
52 ParseError(String),
53 #[error("Validation error: {0}")]
54 ValidationError(String),
55 #[error("IO error: {0}")]
56 IoError(String),
57 #[error("BPMN validation error: {0}")]
58 BPMNValidationError(String),
59 #[error("DMN validation error: {0}")]
60 DMNValidationError(String),
61 #[error("OpenAPI validation error: {0}")]
62 OpenAPIValidationError(String),
63 #[error("BPMN parse error: {0}")]
64 BPMNParseError(String),
65 #[error("DMN parse error: {0}")]
66 DMNParseError(String),
67 #[error("OpenAPI parse error: {0}")]
68 OpenAPIParseError(String),
69}
70
71#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
73pub struct TableData {
74 pub table_index: usize,
75 pub name: Option<String>,
76 pub columns: Vec<ColumnData>,
77 }
79
80#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
82#[serde(rename_all = "camelCase")]
83pub struct ColumnData {
84 #[serde(skip_serializing_if = "Option::is_none")]
87 pub id: Option<String>,
88 pub name: String,
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub business_name: Option<String>,
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub description: Option<String>,
96
97 #[serde(rename = "dataType")]
100 pub data_type: String,
101 #[serde(skip_serializing_if = "Option::is_none")]
103 pub physical_type: Option<String>,
104 #[serde(skip_serializing_if = "Option::is_none")]
106 pub physical_name: Option<String>,
107 #[serde(skip_serializing_if = "Option::is_none")]
109 pub logical_type_options: Option<crate::models::LogicalTypeOptions>,
110
111 #[serde(default)]
114 pub primary_key: bool,
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub primary_key_position: Option<i32>,
118 #[serde(default)]
120 pub unique: bool,
121 #[serde(default = "default_true")]
123 pub nullable: bool,
124
125 #[serde(default)]
128 pub partitioned: bool,
129 #[serde(skip_serializing_if = "Option::is_none")]
131 pub partition_key_position: Option<i32>,
132 #[serde(default)]
134 pub clustered: bool,
135
136 #[serde(skip_serializing_if = "Option::is_none")]
139 pub classification: Option<String>,
140 #[serde(default)]
142 pub critical_data_element: bool,
143 #[serde(skip_serializing_if = "Option::is_none")]
145 pub encrypted_name: Option<String>,
146
147 #[serde(default, skip_serializing_if = "Vec::is_empty")]
150 pub transform_source_objects: Vec<String>,
151 #[serde(skip_serializing_if = "Option::is_none")]
153 pub transform_logic: Option<String>,
154 #[serde(skip_serializing_if = "Option::is_none")]
156 pub transform_description: Option<String>,
157
158 #[serde(default, skip_serializing_if = "Vec::is_empty")]
161 pub examples: Vec<serde_json::Value>,
162 #[serde(skip_serializing_if = "Option::is_none")]
164 pub default_value: Option<serde_json::Value>,
165
166 #[serde(default, skip_serializing_if = "Vec::is_empty")]
169 pub relationships: Vec<crate::models::PropertyRelationship>,
170 #[serde(default, skip_serializing_if = "Vec::is_empty")]
172 pub authoritative_definitions: Vec<crate::models::AuthoritativeDefinition>,
173
174 #[serde(skip_serializing_if = "Option::is_none")]
177 pub quality: Option<Vec<std::collections::HashMap<String, serde_json::Value>>>,
178 #[serde(skip_serializing_if = "Option::is_none")]
180 pub enum_values: Option<Vec<String>>,
181
182 #[serde(default, skip_serializing_if = "Vec::is_empty")]
185 pub tags: Vec<String>,
186 #[serde(default, skip_serializing_if = "std::collections::HashMap::is_empty")]
188 pub custom_properties: std::collections::HashMap<String, serde_json::Value>,
189}
190
191fn default_true() -> bool {
192 true
193}
194
195impl Default for ColumnData {
196 fn default() -> Self {
197 Self {
198 id: None,
200 name: String::new(),
201 business_name: None,
202 description: None,
203 data_type: String::new(),
205 physical_type: None,
206 physical_name: None,
207 logical_type_options: None,
208 primary_key: false,
210 primary_key_position: None,
211 unique: false,
212 nullable: true,
213 partitioned: false,
215 partition_key_position: None,
216 clustered: false,
217 classification: None,
219 critical_data_element: false,
220 encrypted_name: None,
221 transform_source_objects: Vec::new(),
223 transform_logic: None,
224 transform_description: None,
225 examples: Vec::new(),
227 default_value: None,
228 relationships: Vec::new(),
230 authoritative_definitions: Vec::new(),
231 quality: None,
233 enum_values: None,
234 tags: Vec::new(),
236 custom_properties: std::collections::HashMap::new(),
237 }
238 }
239}
240
241pub use avro::AvroImporter;
243pub use cads::CADSImporter;
244pub use decision::DecisionImporter;
245pub use json_schema::JSONSchemaImporter;
246pub use knowledge::KnowledgeImporter;
247pub use odcl::ODCLImporter;
248pub use odcs::ODCSImporter;
249pub use odcs_shared::ParserError;
250pub use odps::ODPSImporter;
251pub use protobuf::ProtobufImporter;
252pub use sql::SQLImporter;
253
254#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
256pub struct TableRequiringName {
257 pub table_index: usize,
258 pub suggested_name: Option<String>,
259}