pub mod avro;
#[cfg(feature = "bpmn")]
pub mod bpmn;
pub mod cads;
pub mod dbmv;
pub mod decision;
#[cfg(feature = "dmn")]
pub mod dmn;
pub mod json_schema;
pub mod knowledge;
pub mod odcl;
pub mod odcs;
pub mod odcs_shared;
pub mod odps;
#[cfg(feature = "openapi")]
pub mod openapi;
pub mod protobuf;
pub mod sketch;
pub mod sql;
#[derive(Debug, serde::Serialize, serde::Deserialize)]
#[must_use = "import results should be processed or errors checked"]
pub struct ImportResult {
pub tables: Vec<TableData>,
pub tables_requiring_name: Vec<TableRequiringName>,
pub errors: Vec<ImportError>,
pub ai_suggestions: Option<Vec<serde_json::Value>>,
}
#[derive(Debug, thiserror::Error, serde::Serialize, serde::Deserialize)]
pub enum ImportError {
#[error("Parse error: {0}")]
ParseError(String),
#[error("Validation error: {0}")]
ValidationError(String),
#[error("IO error: {0}")]
IoError(String),
#[error("BPMN validation error: {0}")]
BPMNValidationError(String),
#[error("DMN validation error: {0}")]
DMNValidationError(String),
#[error("OpenAPI validation error: {0}")]
OpenAPIValidationError(String),
#[error("BPMN parse error: {0}")]
BPMNParseError(String),
#[error("DMN parse error: {0}")]
DMNParseError(String),
#[error("OpenAPI parse error: {0}")]
OpenAPIParseError(String),
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TableData {
pub table_index: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub api_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_product: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tenant: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub physical_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub physical_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub business_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_granularity_description: Option<String>,
pub columns: Vec<ColumnData>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub servers: Vec<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub team: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub support: Option<serde_json::Value>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub roles: Vec<serde_json::Value>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub sla_properties: Vec<serde_json::Value>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub quality: Vec<std::collections::HashMap<String, serde_json::Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub price: Option<serde_json::Value>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub tags: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub custom_properties: Vec<serde_json::Value>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub authoritative_definitions: Vec<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub contract_created_ts: Option<String>,
#[serde(default, skip_serializing_if = "std::collections::HashMap::is_empty")]
pub odcs_metadata: std::collections::HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ColumnData {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub business_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(rename = "dataType")]
pub data_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub physical_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub physical_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub logical_type_options: Option<crate::models::LogicalTypeOptions>,
#[serde(default)]
pub primary_key: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub primary_key_position: Option<i32>,
#[serde(default)]
pub unique: bool,
#[serde(default = "default_true")]
pub nullable: bool,
#[serde(default)]
pub partitioned: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub partition_key_position: Option<i32>,
#[serde(default)]
pub clustered: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub classification: Option<String>,
#[serde(default)]
pub critical_data_element: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub encrypted_name: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub transform_source_objects: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transform_logic: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transform_description: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub examples: Vec<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_value: Option<serde_json::Value>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub relationships: Vec<crate::models::PropertyRelationship>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub authoritative_definitions: Vec<crate::models::AuthoritativeDefinition>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quality: Option<Vec<std::collections::HashMap<String, serde_json::Value>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enum_values: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub tags: Vec<String>,
#[serde(default, skip_serializing_if = "std::collections::HashMap::is_empty")]
pub custom_properties: std::collections::HashMap<String, serde_json::Value>,
}
fn default_true() -> bool {
true
}
impl Default for ColumnData {
fn default() -> Self {
Self {
id: None,
name: String::new(),
business_name: None,
description: None,
data_type: String::new(),
physical_type: None,
physical_name: None,
logical_type_options: None,
primary_key: false,
primary_key_position: None,
unique: false,
nullable: true,
partitioned: false,
partition_key_position: None,
clustered: false,
classification: None,
critical_data_element: false,
encrypted_name: None,
transform_source_objects: Vec::new(),
transform_logic: None,
transform_description: None,
examples: Vec::new(),
default_value: None,
relationships: Vec::new(),
authoritative_definitions: Vec::new(),
quality: None,
enum_values: None,
tags: Vec::new(),
custom_properties: std::collections::HashMap::new(),
}
}
}
pub use avro::AvroImporter;
pub use cads::CADSImporter;
pub use dbmv::DBMVImporter;
pub use decision::DecisionImporter;
pub use json_schema::JSONSchemaImporter;
pub use knowledge::KnowledgeImporter;
pub use odcl::ODCLImporter;
pub use odcs::ODCSImporter;
pub use odcs_shared::ParserError;
pub use odps::ODPSImporter;
pub use protobuf::ProtobufImporter;
pub use sketch::SketchImporter;
pub use sql::SQLImporter;
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct TableRequiringName {
pub table_index: usize,
pub suggested_name: Option<String>,
}