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