1#![allow(clippy::too_many_arguments)]
14
15use crate::*;
16
17mod sealed {
18 pub trait Sealed {}
19}
20impl sealed::Sealed for ParameterServer<'_> {}
21
22pub trait ParameterServerOps<'s>: sealed::Sealed + Sized {
25 fn take_truncated_descriptions(&mut self, report: impl FnMut(NodeKey, &str)) -> usize;
27
28 fn new_in(table: ParameterTable<'s>) -> Self;
30
31 fn set_allow_undeclared(&mut self, node: NodeKey, allow: bool);
33
34 fn allows_undeclared(&self, node: NodeKey) -> bool;
36
37 fn set_parameter_events(&mut self, node: NodeKey, on: bool);
39
40 fn parameter_events_enabled(&self, node: NodeKey) -> bool;
42
43 fn pop_initial_parameter_event(&mut self) -> Option<PendingParameterEvent>;
45
46 fn pop_parameter_event(&mut self) -> Option<PendingParameterEvent>;
48
49 fn take_parameter_events_dropped(&mut self) -> u32;
51
52 fn set_delete_on_not_set(&mut self, node: NodeKey, on: bool);
54
55 fn len(&self, node: NodeKey) -> usize;
57
58 fn is_empty(&self, node: NodeKey) -> bool;
60
61 fn total_len(&self) -> usize;
63
64 fn capacity(&self) -> usize;
66
67 fn is_full(&self) -> bool;
69
70 fn declare(&mut self, node: NodeKey, name: &str, value: ParameterValue) -> bool;
72
73 fn declare_ref(&mut self, node: NodeKey, name: &str, value: &ParameterValue) -> bool;
75
76 fn declare_with_descriptor(
78 &mut self,
79 node: NodeKey,
80 name: &str,
81 value: ParameterValue,
82 descriptor: Option<ParameterDescriptor>,
83 ) -> bool;
84
85 fn try_declare(
87 &mut self,
88 node: NodeKey,
89 name: &str,
90 value: ParameterValue,
91 ) -> Result<(), DeclarationError>;
92
93 fn try_declare_with_descriptor(
95 &mut self,
96 node: NodeKey,
97 name: &str,
98 value: ParameterValue,
99 descriptor: Option<ParameterDescriptor>,
100 ) -> Result<(), DeclarationError>;
101
102 fn try_declare_ref(
104 &mut self,
105 node: NodeKey,
106 name: &str,
107 value: &ParameterValue,
108 descriptor: Option<ParameterDescriptor>,
109 ) -> Result<(), DeclarationError>;
110
111 fn check_apply(
113 &self,
114 node: NodeKey,
115 name: &str,
116 value: &ParameterValue,
117 ) -> Result<(), ParameterError>;
118
119 fn apply(
121 &mut self,
122 node: NodeKey,
123 name: &str,
124 value: ParameterValue,
125 ) -> Result<(), ParameterError>;
126
127 fn apply_ref(
129 &mut self,
130 node: NodeKey,
131 name: &str,
132 value: &ParameterValue,
133 ) -> Result<(), ParameterError>;
134
135 fn apply_staged(
137 &mut self,
138 node: NodeKey,
139 name: &str,
140 staged: &mut ParameterValue,
141 ) -> Result<(), ParameterError>;
142
143 fn set_local(
145 &mut self,
146 node: NodeKey,
147 name: &str,
148 value: ParameterValue,
149 ) -> Result<(), ParameterError>;
150
151 fn add_on_set_parameters_callback(
153 &mut self,
154 node: NodeKey,
155 callback: OnSetParameterFn,
156 ctx: OnSetContext,
157 ) -> Option<OnSetParameterHandle>;
158
159 fn remove_on_set_parameters_callback(&mut self, handle: OnSetParameterHandle) -> bool;
161
162 fn on_set_callbacks_free(&self) -> usize;
164
165 fn set_parameter_description(
167 &mut self,
168 node: NodeKey,
169 name: &str,
170 description: &str,
171 additional_constraints: &str,
172 ) -> bool;
173
174 fn set_parameter_read_only(&mut self, node: NodeKey, name: &str, read_only: bool) -> bool;
176
177 fn set_parameter_integer_range(
179 &mut self,
180 node: NodeKey,
181 name: &str,
182 min: i64,
183 max: i64,
184 step: i64,
185 ) -> bool;
186
187 fn set_parameter_float_range(
189 &mut self,
190 node: NodeKey,
191 name: &str,
192 min: f64,
193 max: f64,
194 step: f64,
195 ) -> bool;
196
197 fn apply_atomically<'x, I>(&mut self, node: NodeKey, items: I) -> Result<(), ParameterError>
199 where
200 I: Iterator<Item = Option<(&'x str, ParameterValue)>> + Clone;
201
202 fn apply_atomically_with<'x>(
204 &mut self,
205 node: NodeKey,
206 count: usize,
207 fill: impl FnMut(usize, &mut ParameterValue) -> Option<&'x str>,
208 ) -> Result<(), ParameterError>;
209
210 fn get(&self, node: NodeKey, name: &str) -> Option<&ParameterValue>;
212
213 fn get_parameter(&self, node: NodeKey, name: &str) -> Option<&Parameter>;
215
216 fn get_descriptor(&self, node: NodeKey, name: &str) -> Option<&ParameterDescriptor>;
218
219 fn set(
221 &mut self,
222 node: NodeKey,
223 name: &str,
224 value: ParameterValue,
225 ) -> Result<(), ParameterError>;
226
227 fn set_ref(
229 &mut self,
230 node: NodeKey,
231 name: &str,
232 value: &ParameterValue,
233 ) -> Result<(), ParameterError>;
234
235 fn unset(&mut self, node: NodeKey, name: &str) -> Result<(), ParameterError>;
237
238 fn set_or_declare(
240 &mut self,
241 node: NodeKey,
242 name: &str,
243 value: ParameterValue,
244 ) -> Result<(), ParameterError>;
245
246 fn has(&self, node: NodeKey, name: &str) -> bool;
248
249 fn remove(&mut self, node: NodeKey, name: &str) -> bool;
251
252 fn get_type(&self, node: NodeKey, name: &str) -> Option<ParameterType>;
254
255 fn iter(&self, node: NodeKey) -> impl Iterator<Item = &Parameter>;
257
258 fn list_names(&self, node: NodeKey) -> impl Iterator<Item = &str>;
260
261 fn list_with_prefix<'a>(
263 &'a self,
264 node: NodeKey,
265 prefix: &'a str,
266 ) -> impl Iterator<Item = &'a str>;
267
268 fn get_bool(&self, node: NodeKey, name: &str) -> Option<bool>;
270
271 fn get_integer(&self, node: NodeKey, name: &str) -> Option<i64>;
273
274 fn get_double(&self, node: NodeKey, name: &str) -> Option<f64>;
276
277 fn get_string(&self, node: NodeKey, name: &str) -> Option<&str>;
279
280 fn set_bool(&mut self, node: NodeKey, name: &str, value: bool) -> Result<(), ParameterError>;
282
283 fn set_integer(&mut self, node: NodeKey, name: &str, value: i64) -> Result<(), ParameterError>;
285
286 fn set_double(&mut self, node: NodeKey, name: &str, value: f64) -> Result<(), ParameterError>;
288
289 fn set_string(&mut self, node: NodeKey, name: &str, value: &str) -> Result<(), ParameterError>;
291
292 fn declare_parameter(
294 &mut self,
295 node: NodeKey,
296 descriptor: ParameterDescriptor,
297 initial_value: Option<&ParameterValue>,
298 ) -> Result<(), ParameterError>;
299
300 fn get_parameter_value(&self, node: NodeKey, name: &str) -> Option<ParameterValue>;
302
303 fn set_parameter_value(
305 &mut self,
306 node: NodeKey,
307 name: &str,
308 value: ParameterValue,
309 ) -> Result<(), ParameterError>;
310}
311
312impl<'s> ParameterServerOps<'s> for ParameterServer<'s> {
313 #[inline]
314 fn take_truncated_descriptions(&mut self, report: impl FnMut(NodeKey, &str)) -> usize {
315 ParameterServer::take_truncated_descriptions(self, report)
316 }
317
318 #[inline]
319 fn new_in(table: ParameterTable<'s>) -> Self {
320 ParameterServer::new_in(table)
321 }
322
323 #[inline]
324 fn set_allow_undeclared(&mut self, node: NodeKey, allow: bool) {
325 ParameterServer::set_allow_undeclared(self, node, allow)
326 }
327
328 #[inline]
329 fn allows_undeclared(&self, node: NodeKey) -> bool {
330 ParameterServer::allows_undeclared(self, node)
331 }
332
333 #[inline]
334 fn set_parameter_events(&mut self, node: NodeKey, on: bool) {
335 ParameterServer::set_parameter_events(self, node, on)
336 }
337
338 #[inline]
339 fn parameter_events_enabled(&self, node: NodeKey) -> bool {
340 ParameterServer::parameter_events_enabled(self, node)
341 }
342
343 #[inline]
344 fn pop_initial_parameter_event(&mut self) -> Option<PendingParameterEvent> {
345 ParameterServer::pop_initial_parameter_event(self)
346 }
347
348 #[inline]
349 fn pop_parameter_event(&mut self) -> Option<PendingParameterEvent> {
350 ParameterServer::pop_parameter_event(self)
351 }
352
353 #[inline]
354 fn take_parameter_events_dropped(&mut self) -> u32 {
355 ParameterServer::take_parameter_events_dropped(self)
356 }
357
358 #[inline]
359 fn set_delete_on_not_set(&mut self, node: NodeKey, on: bool) {
360 ParameterServer::set_delete_on_not_set(self, node, on)
361 }
362
363 #[inline]
364 fn len(&self, node: NodeKey) -> usize {
365 ParameterServer::len(self, node)
366 }
367
368 #[inline]
369 fn is_empty(&self, node: NodeKey) -> bool {
370 ParameterServer::is_empty(self, node)
371 }
372
373 #[inline]
374 fn total_len(&self) -> usize {
375 ParameterServer::total_len(self)
376 }
377
378 #[inline]
379 fn capacity(&self) -> usize {
380 ParameterServer::capacity(self)
381 }
382
383 #[inline]
384 fn is_full(&self) -> bool {
385 ParameterServer::is_full(self)
386 }
387
388 #[inline]
389 fn declare(&mut self, node: NodeKey, name: &str, value: ParameterValue) -> bool {
390 ParameterServer::declare(self, node, name, value)
391 }
392
393 #[inline]
394 fn declare_ref(&mut self, node: NodeKey, name: &str, value: &ParameterValue) -> bool {
395 ParameterServer::declare_ref(self, node, name, value)
396 }
397
398 #[inline]
399 fn declare_with_descriptor(
400 &mut self,
401 node: NodeKey,
402 name: &str,
403 value: ParameterValue,
404 descriptor: Option<ParameterDescriptor>,
405 ) -> bool {
406 ParameterServer::declare_with_descriptor(self, node, name, value, descriptor)
407 }
408
409 #[inline]
410 fn try_declare(
411 &mut self,
412 node: NodeKey,
413 name: &str,
414 value: ParameterValue,
415 ) -> Result<(), DeclarationError> {
416 ParameterServer::try_declare(self, node, name, value)
417 }
418
419 #[inline]
420 fn try_declare_with_descriptor(
421 &mut self,
422 node: NodeKey,
423 name: &str,
424 value: ParameterValue,
425 descriptor: Option<ParameterDescriptor>,
426 ) -> Result<(), DeclarationError> {
427 ParameterServer::try_declare_with_descriptor(self, node, name, value, descriptor)
428 }
429
430 #[inline]
431 fn try_declare_ref(
432 &mut self,
433 node: NodeKey,
434 name: &str,
435 value: &ParameterValue,
436 descriptor: Option<ParameterDescriptor>,
437 ) -> Result<(), DeclarationError> {
438 ParameterServer::try_declare_ref(self, node, name, value, descriptor)
439 }
440
441 #[inline]
442 fn check_apply(
443 &self,
444 node: NodeKey,
445 name: &str,
446 value: &ParameterValue,
447 ) -> Result<(), ParameterError> {
448 ParameterServer::check_apply(self, node, name, value)
449 }
450
451 #[inline]
452 fn apply(
453 &mut self,
454 node: NodeKey,
455 name: &str,
456 value: ParameterValue,
457 ) -> Result<(), ParameterError> {
458 ParameterServer::apply(self, node, name, value)
459 }
460
461 #[inline]
462 fn apply_ref(
463 &mut self,
464 node: NodeKey,
465 name: &str,
466 value: &ParameterValue,
467 ) -> Result<(), ParameterError> {
468 ParameterServer::apply_ref(self, node, name, value)
469 }
470
471 #[inline]
472 fn apply_staged(
473 &mut self,
474 node: NodeKey,
475 name: &str,
476 staged: &mut ParameterValue,
477 ) -> Result<(), ParameterError> {
478 ParameterServer::apply_staged(self, node, name, staged)
479 }
480
481 #[inline]
482 fn set_local(
483 &mut self,
484 node: NodeKey,
485 name: &str,
486 value: ParameterValue,
487 ) -> Result<(), ParameterError> {
488 ParameterServer::set_local(self, node, name, value)
489 }
490
491 #[inline]
492 fn add_on_set_parameters_callback(
493 &mut self,
494 node: NodeKey,
495 callback: OnSetParameterFn,
496 ctx: OnSetContext,
497 ) -> Option<OnSetParameterHandle> {
498 ParameterServer::add_on_set_parameters_callback(self, node, callback, ctx)
499 }
500
501 #[inline]
502 fn remove_on_set_parameters_callback(&mut self, handle: OnSetParameterHandle) -> bool {
503 ParameterServer::remove_on_set_parameters_callback(self, handle)
504 }
505
506 #[inline]
507 fn on_set_callbacks_free(&self) -> usize {
508 ParameterServer::on_set_callbacks_free(self)
509 }
510
511 #[inline]
512 fn set_parameter_description(
513 &mut self,
514 node: NodeKey,
515 name: &str,
516 description: &str,
517 additional_constraints: &str,
518 ) -> bool {
519 ParameterServer::set_parameter_description(
520 self,
521 node,
522 name,
523 description,
524 additional_constraints,
525 )
526 }
527
528 #[inline]
529 fn set_parameter_read_only(&mut self, node: NodeKey, name: &str, read_only: bool) -> bool {
530 ParameterServer::set_parameter_read_only(self, node, name, read_only)
531 }
532
533 #[inline]
534 fn set_parameter_integer_range(
535 &mut self,
536 node: NodeKey,
537 name: &str,
538 min: i64,
539 max: i64,
540 step: i64,
541 ) -> bool {
542 ParameterServer::set_parameter_integer_range(self, node, name, min, max, step)
543 }
544
545 #[inline]
546 fn set_parameter_float_range(
547 &mut self,
548 node: NodeKey,
549 name: &str,
550 min: f64,
551 max: f64,
552 step: f64,
553 ) -> bool {
554 ParameterServer::set_parameter_float_range(self, node, name, min, max, step)
555 }
556
557 #[inline]
558 fn apply_atomically<'x, I>(&mut self, node: NodeKey, items: I) -> Result<(), ParameterError>
559 where
560 I: Iterator<Item = Option<(&'x str, ParameterValue)>> + Clone,
561 {
562 ParameterServer::apply_atomically::<I>(self, node, items)
563 }
564
565 #[inline]
566 fn apply_atomically_with<'x>(
567 &mut self,
568 node: NodeKey,
569 count: usize,
570 fill: impl FnMut(usize, &mut ParameterValue) -> Option<&'x str>,
571 ) -> Result<(), ParameterError> {
572 ParameterServer::apply_atomically_with(self, node, count, fill)
573 }
574
575 #[inline]
576 fn get(&self, node: NodeKey, name: &str) -> Option<&ParameterValue> {
577 ParameterServer::get(self, node, name)
578 }
579
580 #[inline]
581 fn get_parameter(&self, node: NodeKey, name: &str) -> Option<&Parameter> {
582 ParameterServer::get_parameter(self, node, name)
583 }
584
585 #[inline]
586 fn get_descriptor(&self, node: NodeKey, name: &str) -> Option<&ParameterDescriptor> {
587 ParameterServer::get_descriptor(self, node, name)
588 }
589
590 #[inline]
591 fn set(
592 &mut self,
593 node: NodeKey,
594 name: &str,
595 value: ParameterValue,
596 ) -> Result<(), ParameterError> {
597 ParameterServer::set(self, node, name, value)
598 }
599
600 #[inline]
601 fn set_ref(
602 &mut self,
603 node: NodeKey,
604 name: &str,
605 value: &ParameterValue,
606 ) -> Result<(), ParameterError> {
607 ParameterServer::set_ref(self, node, name, value)
608 }
609
610 #[inline]
611 fn unset(&mut self, node: NodeKey, name: &str) -> Result<(), ParameterError> {
612 ParameterServer::unset(self, node, name)
613 }
614
615 #[inline]
616 fn set_or_declare(
617 &mut self,
618 node: NodeKey,
619 name: &str,
620 value: ParameterValue,
621 ) -> Result<(), ParameterError> {
622 ParameterServer::set_or_declare(self, node, name, value)
623 }
624
625 #[inline]
626 fn has(&self, node: NodeKey, name: &str) -> bool {
627 ParameterServer::has(self, node, name)
628 }
629
630 #[inline]
631 fn remove(&mut self, node: NodeKey, name: &str) -> bool {
632 ParameterServer::remove(self, node, name)
633 }
634
635 #[inline]
636 fn get_type(&self, node: NodeKey, name: &str) -> Option<ParameterType> {
637 ParameterServer::get_type(self, node, name)
638 }
639
640 #[inline]
641 fn iter(&self, node: NodeKey) -> impl Iterator<Item = &Parameter> {
642 ParameterServer::iter(self, node)
643 }
644
645 #[inline]
646 fn list_names(&self, node: NodeKey) -> impl Iterator<Item = &str> {
647 ParameterServer::list_names(self, node)
648 }
649
650 #[inline]
651 fn list_with_prefix<'a>(
652 &'a self,
653 node: NodeKey,
654 prefix: &'a str,
655 ) -> impl Iterator<Item = &'a str> {
656 ParameterServer::list_with_prefix(self, node, prefix)
657 }
658
659 #[inline]
660 fn get_bool(&self, node: NodeKey, name: &str) -> Option<bool> {
661 ParameterServer::get_bool(self, node, name)
662 }
663
664 #[inline]
665 fn get_integer(&self, node: NodeKey, name: &str) -> Option<i64> {
666 ParameterServer::get_integer(self, node, name)
667 }
668
669 #[inline]
670 fn get_double(&self, node: NodeKey, name: &str) -> Option<f64> {
671 ParameterServer::get_double(self, node, name)
672 }
673
674 #[inline]
675 fn get_string(&self, node: NodeKey, name: &str) -> Option<&str> {
676 ParameterServer::get_string(self, node, name)
677 }
678
679 #[inline]
680 fn set_bool(&mut self, node: NodeKey, name: &str, value: bool) -> Result<(), ParameterError> {
681 ParameterServer::set_bool(self, node, name, value)
682 }
683
684 #[inline]
685 fn set_integer(&mut self, node: NodeKey, name: &str, value: i64) -> Result<(), ParameterError> {
686 ParameterServer::set_integer(self, node, name, value)
687 }
688
689 #[inline]
690 fn set_double(&mut self, node: NodeKey, name: &str, value: f64) -> Result<(), ParameterError> {
691 ParameterServer::set_double(self, node, name, value)
692 }
693
694 #[inline]
695 fn set_string(&mut self, node: NodeKey, name: &str, value: &str) -> Result<(), ParameterError> {
696 ParameterServer::set_string(self, node, name, value)
697 }
698
699 #[inline]
700 fn declare_parameter(
701 &mut self,
702 node: NodeKey,
703 descriptor: ParameterDescriptor,
704 initial_value: Option<&ParameterValue>,
705 ) -> Result<(), ParameterError> {
706 ParameterServer::declare_parameter(self, node, descriptor, initial_value)
707 }
708
709 #[inline]
710 fn get_parameter_value(&self, node: NodeKey, name: &str) -> Option<ParameterValue> {
711 ParameterServer::get_parameter_value(self, node, name)
712 }
713
714 #[inline]
715 fn set_parameter_value(
716 &mut self,
717 node: NodeKey,
718 name: &str,
719 value: ParameterValue,
720 ) -> Result<(), ParameterError> {
721 ParameterServer::set_parameter_value(self, node, name, value)
722 }
723}