az_device_contract_codegen/
model.rs1use 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}