data_modelling_sdk/models/
mod.rs

1//! Models module for the SDK
2//!
3//! Defines core data structures used by the SDK for import/export operations.
4//! These models are simplified versions focused on the SDK's needs.
5
6#[cfg(feature = "bpmn")]
7pub mod bpmn;
8pub mod cads;
9pub mod column;
10pub mod cross_domain;
11pub mod data_model;
12#[cfg(feature = "dmn")]
13pub mod dmn;
14pub mod domain;
15pub mod enums;
16pub mod odps;
17#[cfg(feature = "openapi")]
18pub mod openapi;
19pub mod relationship;
20pub mod table;
21pub mod tag;
22
23#[cfg(feature = "bpmn")]
24pub use bpmn::{BPMNModel, BPMNModelFormat};
25pub use cads::{
26    CADSAsset, CADSBPMNFormat, CADSBPMNModel, CADSCompliance, CADSComplianceControl,
27    CADSComplianceFramework, CADSComplianceStatus, CADSDMNFormat, CADSDMNModel, CADSDescription,
28    CADSExternalLink, CADSImpactArea, CADSKind, CADSMitigationStatus, CADSOpenAPIFormat,
29    CADSOpenAPISpec, CADSPricing, CADSPricingModel, CADSRisk, CADSRiskAssessment,
30    CADSRiskClassification, CADSRiskMitigation, CADSRuntime, CADSRuntimeContainer,
31    CADSRuntimeResources, CADSSLA, CADSSLAProperty, CADSStatus, CADSTeamMember,
32    CADSValidationProfile, CADSValidationProfileAppliesTo,
33};
34pub use column::{Column, ForeignKey};
35pub use cross_domain::{CrossDomainConfig, CrossDomainRelationshipRef, CrossDomainTableRef};
36pub use data_model::DataModel;
37#[cfg(feature = "dmn")]
38pub use dmn::{DMNModel, DMNModelFormat};
39pub use domain::{
40    CADSNode, CrowsfeetCardinality, Domain, NodeConnection, ODCSNode, SharedNodeReference, System,
41    SystemConnection,
42};
43pub use enums::*;
44pub use odps::{
45    ODPSApiVersion, ODPSAuthoritativeDefinition, ODPSCustomProperty, ODPSDataProduct,
46    ODPSDescription, ODPSInputContract, ODPSInputPort, ODPSManagementPort, ODPSOutputPort,
47    ODPSSBOM, ODPSStatus, ODPSSupport, ODPSTeam, ODPSTeamMember,
48};
49#[cfg(feature = "openapi")]
50pub use openapi::{OpenAPIFormat, OpenAPIModel};
51pub use relationship::{
52    ConnectionPoint, ETLJobMetadata, ForeignKeyDetails, Relationship, VisualMetadata,
53};
54pub use table::{ContactDetails, Position, SlaProperty, Table};
55pub use tag::Tag;
56
57use serde::{Deserialize, Serialize};
58
59/// Model type for references
60#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
61#[serde(rename_all = "PascalCase")]
62pub enum ModelType {
63    /// BPMN model
64    Bpmn,
65    /// DMN model
66    Dmn,
67    /// OpenAPI specification
68    OpenApi,
69}
70
71/// Model reference for CADS assets
72///
73/// Represents a reference from a CADS asset to a BPMN, DMN, or OpenAPI model.
74#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
75pub struct ModelReference {
76    /// Type of model being referenced
77    pub model_type: ModelType,
78    /// Target domain ID (None for same domain)
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub domain_id: Option<uuid::Uuid>,
81    /// Name of the referenced model
82    pub model_name: String,
83    /// Optional description of the reference
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub description: Option<String>,
86}
87
88impl ModelReference {
89    /// Create a new model reference
90    pub fn new(model_type: ModelType, model_name: String) -> Self {
91        ModelReference {
92            model_type,
93            domain_id: None,
94            model_name,
95            description: None,
96        }
97    }
98
99    /// Create a cross-domain model reference
100    pub fn new_cross_domain(
101        model_type: ModelType,
102        domain_id: uuid::Uuid,
103        model_name: String,
104    ) -> Self {
105        ModelReference {
106            model_type,
107            domain_id: Some(domain_id),
108            model_name,
109            description: None,
110        }
111    }
112}