Skip to main content

az_device_contract_codegen/
model.rs

1use std::path::PathBuf;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
4pub enum TransportKind {
5    Rtu,
6    Tcp,
7}
8
9impl TransportKind {
10    pub fn as_str(&self) -> &'static str {
11        match self {
12            Self::Rtu => "RTU",
13            Self::Tcp => "TCP",
14        }
15    }
16
17    pub fn file_segment(&self) -> &'static str {
18        match self {
19            Self::Rtu => "rtu",
20            Self::Tcp => "tcp",
21        }
22    }
23}
24
25#[derive(Debug, Clone, PartialEq, Eq)]
26pub enum ApiKind {
27    StaticRead,
28    RuntimeRead,
29    Write,
30}
31
32impl ApiKind {
33    pub fn as_str(&self) -> &'static str {
34        match self {
35            Self::StaticRead => "STATIC_READ",
36            Self::RuntimeRead => "RUNTIME_READ",
37            Self::Write => "WRITE",
38        }
39    }
40}
41
42#[derive(Debug, Clone, PartialEq, Eq)]
43pub enum ValueType {
44    Boolean,
45    Int,
46    String,
47    Bytes,
48}
49
50#[derive(Debug, Clone, PartialEq, Eq)]
51pub enum ReadReturnKind {
52    Dto,
53    Boolean,
54    Int,
55    String,
56    Bytes,
57}
58
59#[derive(Debug, Clone, PartialEq, Eq)]
60pub enum RegisterArea {
61    Coil,
62    DiscreteInput,
63    HoldingRegister,
64    InputRegister,
65}
66
67#[derive(Debug, Clone, PartialEq, Eq)]
68pub struct ContractTypedItem {
69    pub name: String,
70    pub summary: Option<String>,
71    pub value_type: ValueType,
72}
73
74#[derive(Debug, Clone, PartialEq, Eq)]
75pub struct ContractMethod {
76    pub summary: Option<String>,
77    pub method_name: String,
78    pub read_return_kind: Option<ReadReturnKind>,
79    pub read_return_type_name: Option<String>,
80    pub read_area: Option<RegisterArea>,
81    pub write_area: Option<RegisterArea>,
82    pub read_fields: Vec<ContractTypedItem>,
83    pub parameters: Vec<ContractTypedItem>,
84}
85
86#[derive(Debug, Clone, PartialEq, Eq)]
87pub struct ContractService {
88    pub api_kind: ApiKind,
89    pub interface_name: String,
90    pub interface_summary: Option<String>,
91    pub methods: Vec<ContractMethod>,
92}
93
94#[derive(Debug, Clone, PartialEq, Eq)]
95pub struct ContractRenderRequest {
96    pub transports: Vec<TransportKind>,
97    pub services: Vec<ContractService>,
98}
99
100#[derive(Debug, Clone, PartialEq, Eq)]
101pub enum ArtifactGroup {
102    CServiceContract,
103    CTransportContract,
104    MarkdownProtocol,
105    RustTokioModbus,
106}
107
108impl ArtifactGroup {
109    pub fn as_str(&self) -> &'static str {
110        match self {
111            Self::CServiceContract => "C_SERVICE_CONTRACT",
112            Self::CTransportContract => "C_TRANSPORT_CONTRACT",
113            Self::MarkdownProtocol => "MARKDOWN_PROTOCOL",
114            Self::RustTokioModbus => "RUST_TOKIO_MODBUS",
115        }
116    }
117}
118
119#[derive(Debug, Clone, PartialEq, Eq)]
120pub struct GeneratedArtifact {
121    pub relative_path: PathBuf,
122    pub package_name: Option<String>,
123    pub file_name: String,
124    pub extension_name: String,
125    pub content: String,
126    pub artifact_group: ArtifactGroup,
127    pub transport: TransportKind,
128    pub service_interface_name: Option<String>,
129}
130
131#[derive(Debug, Clone, PartialEq, Eq)]
132pub struct ServiceSummary {
133    pub api_kind: String,
134    pub interface_package: String,
135    pub interface_simple_name: String,
136    pub summary: String,
137    pub operation_count: i64,
138}
139
140#[derive(Debug, Clone, PartialEq, Eq)]
141pub struct GeneratedBundle {
142    pub summary: String,
143    pub artifacts: Vec<GeneratedArtifact>,
144    pub services: Vec<ServiceSummary>,
145}