1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
4pub struct Limits {
6 #[serde(default = "defaults::max_array_length")]
8 pub max_array_length: usize,
9 #[serde(default = "defaults::max_string_length")]
11 pub max_string_length: usize,
12 #[serde(default = "defaults::max_byte_string_length")]
14 pub max_byte_string_length: usize,
15 #[serde(default = "defaults::max_message_size")]
17 pub max_message_size: usize,
18 #[serde(default = "defaults::max_chunk_count")]
20 pub max_chunk_count: usize,
21 #[serde(default = "defaults::send_buffer_size")]
23 pub send_buffer_size: usize,
24 #[serde(default = "defaults::receive_buffer_size")]
26 pub receive_buffer_size: usize,
27 #[serde(default)]
29 pub subscriptions: SubscriptionLimits,
30 #[serde(default)]
32 pub operational: OperationalLimits,
33 #[serde(default = "defaults::max_browse_continuation_points")]
35 pub max_browse_continuation_points: usize,
36 #[serde(default = "defaults::max_history_continuation_points")]
38 pub max_history_continuation_points: usize,
39 #[serde(default = "defaults::max_query_continuation_points")]
41 pub max_query_continuation_points: usize,
42 #[serde(default = "defaults::max_sessions")]
44 pub max_sessions: usize,
45}
46
47impl Default for Limits {
48 fn default() -> Self {
49 Self {
50 max_array_length: defaults::max_array_length(),
51 max_string_length: defaults::max_string_length(),
52 max_byte_string_length: defaults::max_byte_string_length(),
53 max_message_size: defaults::max_message_size(),
54 max_chunk_count: defaults::max_chunk_count(),
55 send_buffer_size: defaults::send_buffer_size(),
56 receive_buffer_size: defaults::receive_buffer_size(),
57 subscriptions: Default::default(),
58 max_browse_continuation_points: defaults::max_browse_continuation_points(),
59 max_history_continuation_points: defaults::max_history_continuation_points(),
60 max_query_continuation_points: defaults::max_query_continuation_points(),
61 operational: OperationalLimits::default(),
62 max_sessions: defaults::max_sessions(),
63 }
64 }
65}
66
67#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
68pub struct SubscriptionLimits {
70 #[serde(default = "defaults::max_subscriptions_per_session")]
72 pub max_subscriptions_per_session: usize,
73 #[serde(default = "defaults::max_pending_publish_requests")]
75 pub max_pending_publish_requests: usize,
76 #[serde(default = "defaults::max_publish_requests_per_subscription")]
79 pub max_publish_requests_per_subscription: usize,
80 #[serde(default = "defaults::min_sampling_interval_ms")]
82 pub min_sampling_interval_ms: f64,
83 #[serde(default = "defaults::min_publishing_interval_ms")]
85 pub min_publishing_interval_ms: f64,
86 #[serde(default = "defaults::max_keep_alive_count")]
88 pub max_keep_alive_count: u32,
89 #[serde(default = "defaults::default_keep_alive_count")]
91 pub default_keep_alive_count: u32,
92 #[serde(default = "defaults::max_monitored_items_per_sub")]
94 pub max_monitored_items_per_sub: usize,
95 #[serde(default = "defaults::max_monitored_item_queue_size")]
97 pub max_monitored_item_queue_size: usize,
98 #[serde(default = "defaults::max_lifetime_count")]
100 pub max_lifetime_count: u32,
101 #[serde(default = "defaults::max_notifications_per_publish")]
103 pub max_notifications_per_publish: u64,
104 #[serde(default = "defaults::max_queued_notifications")]
106 pub max_queued_notifications: usize,
107}
108
109impl Default for SubscriptionLimits {
110 fn default() -> Self {
111 Self {
112 max_subscriptions_per_session: defaults::max_subscriptions_per_session(),
113 max_pending_publish_requests: defaults::max_pending_publish_requests(),
114 max_publish_requests_per_subscription: defaults::max_publish_requests_per_subscription(
115 ),
116 min_sampling_interval_ms: defaults::min_sampling_interval_ms(),
117 min_publishing_interval_ms: defaults::min_publishing_interval_ms(),
118 max_keep_alive_count: defaults::max_keep_alive_count(),
119 default_keep_alive_count: defaults::default_keep_alive_count(),
120 max_monitored_items_per_sub: defaults::max_monitored_items_per_sub(),
121 max_monitored_item_queue_size: defaults::max_monitored_item_queue_size(),
122 max_lifetime_count: defaults::max_lifetime_count(),
123 max_notifications_per_publish: defaults::max_notifications_per_publish(),
124 max_queued_notifications: defaults::max_queued_notifications(),
125 }
126 }
127}
128
129#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
130pub struct OperationalLimits {
132 #[serde(default = "defaults::max_nodes_per_translate_browse_paths_to_node_ids")]
134 pub max_nodes_per_translate_browse_paths_to_node_ids: usize,
135 #[serde(default = "defaults::max_nodes_per_read")]
137 pub max_nodes_per_read: usize,
138 #[serde(default = "defaults::max_nodes_per_write")]
140 pub max_nodes_per_write: usize,
141 #[serde(default = "defaults::max_nodes_per_method_call")]
143 pub max_nodes_per_method_call: usize,
144 #[serde(default = "defaults::max_nodes_per_browse")]
146 pub max_nodes_per_browse: usize,
147 #[serde(default = "defaults::max_nodes_per_register_nodes")]
149 pub max_nodes_per_register_nodes: usize,
150 #[serde(default = "defaults::max_monitored_items_per_call")]
152 pub max_monitored_items_per_call: usize,
153 #[serde(default = "defaults::max_nodes_per_history_read_data")]
155 pub max_nodes_per_history_read_data: usize,
156 #[serde(default = "defaults::max_nodes_per_history_read_events")]
158 pub max_nodes_per_history_read_events: usize,
159 #[serde(default = "defaults::max_nodes_per_history_update")]
161 pub max_nodes_per_history_update: usize,
162 #[serde(default = "defaults::max_references_per_browse_node")]
164 pub max_references_per_browse_node: usize,
165 #[serde(default = "defaults::max_node_descs_per_query")]
167 pub max_node_descs_per_query: usize,
168 #[serde(default = "defaults::max_data_sets_query_return")]
170 pub max_data_sets_query_return: usize,
171 #[serde(default = "defaults::max_references_query_return")]
173 pub max_references_query_return: usize,
174 #[serde(default = "defaults::max_nodes_per_node_management")]
176 pub max_nodes_per_node_management: usize,
177 #[serde(default = "defaults::max_references_per_references_management")]
179 pub max_references_per_references_management: usize,
180 #[serde(default = "defaults::max_subscriptions_per_call")]
182 pub max_subscriptions_per_call: usize,
183}
184
185impl Default for OperationalLimits {
186 fn default() -> Self {
187 Self {
188 max_nodes_per_translate_browse_paths_to_node_ids:
189 defaults::max_nodes_per_translate_browse_paths_to_node_ids(),
190 max_nodes_per_read: defaults::max_nodes_per_read(),
191 max_nodes_per_write: defaults::max_nodes_per_write(),
192 max_nodes_per_method_call: defaults::max_nodes_per_method_call(),
193 max_nodes_per_browse: defaults::max_nodes_per_browse(),
194 max_nodes_per_register_nodes: defaults::max_nodes_per_register_nodes(),
195 max_monitored_items_per_call: defaults::max_monitored_items_per_call(),
196 max_nodes_per_history_read_data: defaults::max_nodes_per_history_read_data(),
197 max_nodes_per_history_read_events: defaults::max_nodes_per_history_read_events(),
198 max_nodes_per_history_update: defaults::max_nodes_per_history_update(),
199 max_references_per_browse_node: defaults::max_references_per_browse_node(),
200 max_node_descs_per_query: defaults::max_node_descs_per_query(),
201 max_data_sets_query_return: defaults::max_data_sets_query_return(),
202 max_references_query_return: defaults::max_references_query_return(),
203 max_nodes_per_node_management: defaults::max_nodes_per_node_management(),
204 max_references_per_references_management:
205 defaults::max_references_per_references_management(),
206 max_subscriptions_per_call: defaults::max_subscriptions_per_call(),
207 }
208 }
209}
210
211mod defaults {
212 use crate::constants;
213 pub(super) fn max_array_length() -> usize {
214 opcua_types::constants::MAX_ARRAY_LENGTH
215 }
216 pub(super) fn max_string_length() -> usize {
217 opcua_types::constants::MAX_STRING_LENGTH
218 }
219 pub(super) fn max_byte_string_length() -> usize {
220 opcua_types::constants::MAX_BYTE_STRING_LENGTH
221 }
222 pub(super) fn max_message_size() -> usize {
223 opcua_types::constants::MAX_MESSAGE_SIZE
224 }
225 pub(super) fn max_chunk_count() -> usize {
226 opcua_types::constants::MAX_CHUNK_COUNT
227 }
228 pub(super) fn send_buffer_size() -> usize {
229 constants::SEND_BUFFER_SIZE
230 }
231 pub(super) fn receive_buffer_size() -> usize {
232 constants::RECEIVE_BUFFER_SIZE
233 }
234 pub(super) fn max_browse_continuation_points() -> usize {
235 constants::MAX_BROWSE_CONTINUATION_POINTS
236 }
237 pub(super) fn max_history_continuation_points() -> usize {
238 constants::MAX_HISTORY_CONTINUATION_POINTS
239 }
240 pub(super) fn max_query_continuation_points() -> usize {
241 constants::MAX_QUERY_CONTINUATION_POINTS
242 }
243 pub(super) fn max_sessions() -> usize {
244 constants::MAX_SESSIONS
245 }
246
247 pub(super) fn max_subscriptions_per_session() -> usize {
248 constants::MAX_SUBSCRIPTIONS_PER_SESSION
249 }
250 pub(super) fn max_pending_publish_requests() -> usize {
251 constants::MAX_PENDING_PUBLISH_REQUESTS
252 }
253 pub(super) fn max_publish_requests_per_subscription() -> usize {
254 constants::MAX_PUBLISH_REQUESTS_PER_SUBSCRIPTION
255 }
256 pub(super) fn min_sampling_interval_ms() -> f64 {
257 constants::MIN_SAMPLING_INTERVAL_MS
258 }
259 pub(super) fn min_publishing_interval_ms() -> f64 {
260 constants::MIN_PUBLISHING_INTERVAL_MS
261 }
262 pub(super) fn max_keep_alive_count() -> u32 {
263 constants::MAX_KEEP_ALIVE_COUNT
264 }
265 pub(super) fn default_keep_alive_count() -> u32 {
266 constants::DEFAULT_KEEP_ALIVE_COUNT
267 }
268 pub(super) fn max_monitored_items_per_sub() -> usize {
269 constants::DEFAULT_MAX_MONITORED_ITEMS_PER_SUB
270 }
271 pub(super) fn max_monitored_item_queue_size() -> usize {
272 constants::MAX_DATA_CHANGE_QUEUE_SIZE
273 }
274 pub(super) fn max_lifetime_count() -> u32 {
275 constants::MAX_KEEP_ALIVE_COUNT * 3
276 }
277 pub(super) fn max_notifications_per_publish() -> u64 {
278 constants::MAX_NOTIFICATIONS_PER_PUBLISH
279 }
280 pub(super) fn max_queued_notifications() -> usize {
281 constants::MAX_QUEUED_NOTIFICATIONS
282 }
283
284 pub(super) fn max_nodes_per_translate_browse_paths_to_node_ids() -> usize {
285 constants::MAX_NODES_PER_TRANSLATE_BROWSE_PATHS_TO_NODE_IDS
286 }
287 pub(super) fn max_nodes_per_read() -> usize {
288 constants::MAX_NODES_PER_READ
289 }
290 pub(super) fn max_nodes_per_write() -> usize {
291 constants::MAX_NODES_PER_WRITE
292 }
293 pub(super) fn max_nodes_per_method_call() -> usize {
294 constants::MAX_NODES_PER_METHOD_CALL
295 }
296 pub(super) fn max_nodes_per_browse() -> usize {
297 constants::MAX_NODES_PER_BROWSE
298 }
299 pub(super) fn max_nodes_per_register_nodes() -> usize {
300 constants::MAX_NODES_PER_REGISTER_NODES
301 }
302 pub(super) fn max_monitored_items_per_call() -> usize {
303 constants::MAX_MONITORED_ITEMS_PER_CALL
304 }
305 pub(super) fn max_nodes_per_history_read_data() -> usize {
306 constants::MAX_NODES_PER_HISTORY_READ_DATA
307 }
308 pub(super) fn max_nodes_per_history_read_events() -> usize {
309 constants::MAX_NODES_PER_HISTORY_READ_EVENTS
310 }
311 pub(super) fn max_nodes_per_history_update() -> usize {
312 constants::MAX_NODES_PER_HISTORY_UPDATE
313 }
314 pub(super) fn max_references_per_browse_node() -> usize {
315 constants::MAX_REFERENCES_PER_BROWSE_NODE
316 }
317 pub(super) fn max_node_descs_per_query() -> usize {
318 constants::MAX_NODE_DESCS_PER_QUERY
319 }
320 pub(super) fn max_data_sets_query_return() -> usize {
321 constants::MAX_DATA_SETS_QUERY_RETURN
322 }
323 pub(super) fn max_references_query_return() -> usize {
324 constants::MAX_REFERENCES_QUERY_RETURN
325 }
326 pub(super) fn max_nodes_per_node_management() -> usize {
327 constants::MAX_NODES_PER_NODE_MANAGEMENT
328 }
329 pub(super) fn max_references_per_references_management() -> usize {
330 constants::MAX_REFERENCES_PER_REFERENCE_MANAGEMENT
331 }
332 pub(super) fn max_subscriptions_per_call() -> usize {
333 constants::MAX_SUBSCRIPTIONS_PER_CALL
334 }
335}