Skip to main content

nros_params/
ops.rs

1//! `ParameterServer`'s operations, behind a sealed trait (phase-515 R10 stage 2).
2//!
3//! The node is the user-facing parameter receiver, as in rclrs (maintainer
4//! decision 2026-10-27): a Rust user declares, reads and writes parameters
5//! through the `Node` that `create_node` / `node_mut(id)` returns. The store
6//! itself is the executor's one table. The code that implements those verbs
7//! (`nros-node`, the C and C++ shims), and a caller holding a standalone store,
8//! reach it through [`ParameterServerOps`]. `nros` never re-exports the trait,
9//! so a `nros` user does not see these methods.
10//!
11//! Each method is a crate-private inherent method of [`ParameterServer`]; the
12//! trait forwards to it, and nothing else implements it.
13#![allow(clippy::too_many_arguments)]
14
15use crate::*;
16
17mod sealed {
18    pub trait Sealed {}
19}
20impl sealed::Sealed for ParameterServer<'_> {}
21
22/// `ParameterServer`'s operations, for the crates that implement the
23/// parameter verbs. Sealed.
24pub trait ParameterServerOps<'s>: sealed::Sealed + Sized {
25    /// See `ParameterServer::take_truncated_descriptions` in `server.rs`.
26    fn take_truncated_descriptions(&mut self, report: impl FnMut(NodeKey, &str)) -> usize;
27
28    /// See `ParameterServer::new_in` in `server.rs`.
29    fn new_in(table: ParameterTable<'s>) -> Self;
30
31    /// See `ParameterServer::set_allow_undeclared` in `server.rs`.
32    fn set_allow_undeclared(&mut self, node: NodeKey, allow: bool);
33
34    /// See `ParameterServer::allows_undeclared` in `server.rs`.
35    fn allows_undeclared(&self, node: NodeKey) -> bool;
36
37    /// See `ParameterServer::set_parameter_events` in `server.rs`.
38    fn set_parameter_events(&mut self, node: NodeKey, on: bool);
39
40    /// See `ParameterServer::parameter_events_enabled` in `server.rs`.
41    fn parameter_events_enabled(&self, node: NodeKey) -> bool;
42
43    /// See `ParameterServer::pop_initial_parameter_event` in `server.rs`.
44    fn pop_initial_parameter_event(&mut self) -> Option<PendingParameterEvent>;
45
46    /// See `ParameterServer::pop_parameter_event` in `server.rs`.
47    fn pop_parameter_event(&mut self) -> Option<PendingParameterEvent>;
48
49    /// See `ParameterServer::take_parameter_events_dropped` in `server.rs`.
50    fn take_parameter_events_dropped(&mut self) -> u32;
51
52    /// See `ParameterServer::set_delete_on_not_set` in `server.rs`.
53    fn set_delete_on_not_set(&mut self, node: NodeKey, on: bool);
54
55    /// See `ParameterServer::len` in `server.rs`.
56    fn len(&self, node: NodeKey) -> usize;
57
58    /// See `ParameterServer::is_empty` in `server.rs`.
59    fn is_empty(&self, node: NodeKey) -> bool;
60
61    /// See `ParameterServer::total_len` in `server.rs`.
62    fn total_len(&self) -> usize;
63
64    /// See `ParameterServer::capacity` in `server.rs`.
65    fn capacity(&self) -> usize;
66
67    /// See `ParameterServer::is_full` in `server.rs`.
68    fn is_full(&self) -> bool;
69
70    /// See `ParameterServer::declare` in `server.rs`.
71    fn declare(&mut self, node: NodeKey, name: &str, value: ParameterValue) -> bool;
72
73    /// See `ParameterServer::declare_ref` in `server.rs`.
74    fn declare_ref(&mut self, node: NodeKey, name: &str, value: &ParameterValue) -> bool;
75
76    /// See `ParameterServer::declare_with_descriptor` in `server.rs`.
77    fn declare_with_descriptor(
78        &mut self,
79        node: NodeKey,
80        name: &str,
81        value: ParameterValue,
82        descriptor: Option<ParameterDescriptor>,
83    ) -> bool;
84
85    /// See `ParameterServer::try_declare` in `server.rs`.
86    fn try_declare(
87        &mut self,
88        node: NodeKey,
89        name: &str,
90        value: ParameterValue,
91    ) -> Result<(), DeclarationError>;
92
93    /// See `ParameterServer::try_declare_with_descriptor` in `server.rs`.
94    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    /// See `ParameterServer::try_declare_ref` in `server.rs`.
103    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    /// See `ParameterServer::check_apply` in `server.rs`.
112    fn check_apply(
113        &self,
114        node: NodeKey,
115        name: &str,
116        value: &ParameterValue,
117    ) -> Result<(), ParameterError>;
118
119    /// See `ParameterServer::apply` in `server.rs`.
120    fn apply(
121        &mut self,
122        node: NodeKey,
123        name: &str,
124        value: ParameterValue,
125    ) -> Result<(), ParameterError>;
126
127    /// See `ParameterServer::apply_ref` in `server.rs`.
128    fn apply_ref(
129        &mut self,
130        node: NodeKey,
131        name: &str,
132        value: &ParameterValue,
133    ) -> Result<(), ParameterError>;
134
135    /// See `ParameterServer::apply_staged` in `server.rs`.
136    fn apply_staged(
137        &mut self,
138        node: NodeKey,
139        name: &str,
140        staged: &mut ParameterValue,
141    ) -> Result<(), ParameterError>;
142
143    /// See `ParameterServer::set_local` in `server.rs`.
144    fn set_local(
145        &mut self,
146        node: NodeKey,
147        name: &str,
148        value: ParameterValue,
149    ) -> Result<(), ParameterError>;
150
151    /// See `ParameterServer::add_on_set_parameters_callback` in `server.rs`.
152    fn add_on_set_parameters_callback(
153        &mut self,
154        node: NodeKey,
155        callback: OnSetParameterFn,
156        ctx: OnSetContext,
157    ) -> Option<OnSetParameterHandle>;
158
159    /// See `ParameterServer::remove_on_set_parameters_callback` in `server.rs`.
160    fn remove_on_set_parameters_callback(&mut self, handle: OnSetParameterHandle) -> bool;
161
162    /// See `ParameterServer::on_set_callbacks_free` in `server.rs`.
163    fn on_set_callbacks_free(&self) -> usize;
164
165    /// See `ParameterServer::set_parameter_description` in `server.rs`.
166    fn set_parameter_description(
167        &mut self,
168        node: NodeKey,
169        name: &str,
170        description: &str,
171        additional_constraints: &str,
172    ) -> bool;
173
174    /// See `ParameterServer::set_parameter_read_only` in `server.rs`.
175    fn set_parameter_read_only(&mut self, node: NodeKey, name: &str, read_only: bool) -> bool;
176
177    /// See `ParameterServer::set_parameter_integer_range` in `server.rs`.
178    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    /// See `ParameterServer::set_parameter_float_range` in `server.rs`.
188    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    /// See `ParameterServer::apply_atomically` in `server.rs`.
198    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    /// See `ParameterServer::apply_atomically_with` in `server.rs`.
203    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    /// See `ParameterServer::get` in `server.rs`.
211    fn get(&self, node: NodeKey, name: &str) -> Option<&ParameterValue>;
212
213    /// See `ParameterServer::get_parameter` in `server.rs`.
214    fn get_parameter(&self, node: NodeKey, name: &str) -> Option<&Parameter>;
215
216    /// See `ParameterServer::get_descriptor` in `server.rs`.
217    fn get_descriptor(&self, node: NodeKey, name: &str) -> Option<&ParameterDescriptor>;
218
219    /// See `ParameterServer::set` in `server.rs`.
220    fn set(
221        &mut self,
222        node: NodeKey,
223        name: &str,
224        value: ParameterValue,
225    ) -> Result<(), ParameterError>;
226
227    /// See `ParameterServer::set_ref` in `server.rs`.
228    fn set_ref(
229        &mut self,
230        node: NodeKey,
231        name: &str,
232        value: &ParameterValue,
233    ) -> Result<(), ParameterError>;
234
235    /// See `ParameterServer::unset` in `server.rs`.
236    fn unset(&mut self, node: NodeKey, name: &str) -> Result<(), ParameterError>;
237
238    /// See `ParameterServer::set_or_declare` in `server.rs`.
239    fn set_or_declare(
240        &mut self,
241        node: NodeKey,
242        name: &str,
243        value: ParameterValue,
244    ) -> Result<(), ParameterError>;
245
246    /// See `ParameterServer::has` in `server.rs`.
247    fn has(&self, node: NodeKey, name: &str) -> bool;
248
249    /// See `ParameterServer::remove` in `server.rs`.
250    fn remove(&mut self, node: NodeKey, name: &str) -> bool;
251
252    /// See `ParameterServer::get_type` in `server.rs`.
253    fn get_type(&self, node: NodeKey, name: &str) -> Option<ParameterType>;
254
255    /// See `ParameterServer::iter` in `server.rs`.
256    fn iter(&self, node: NodeKey) -> impl Iterator<Item = &Parameter>;
257
258    /// See `ParameterServer::list_names` in `server.rs`.
259    fn list_names(&self, node: NodeKey) -> impl Iterator<Item = &str>;
260
261    /// See `ParameterServer::list_with_prefix` in `server.rs`.
262    fn list_with_prefix<'a>(
263        &'a self,
264        node: NodeKey,
265        prefix: &'a str,
266    ) -> impl Iterator<Item = &'a str>;
267
268    /// See `ParameterServer::get_bool` in `server.rs`.
269    fn get_bool(&self, node: NodeKey, name: &str) -> Option<bool>;
270
271    /// See `ParameterServer::get_integer` in `server.rs`.
272    fn get_integer(&self, node: NodeKey, name: &str) -> Option<i64>;
273
274    /// See `ParameterServer::get_double` in `server.rs`.
275    fn get_double(&self, node: NodeKey, name: &str) -> Option<f64>;
276
277    /// See `ParameterServer::get_string` in `server.rs`.
278    fn get_string(&self, node: NodeKey, name: &str) -> Option<&str>;
279
280    /// See `ParameterServer::set_bool` in `server.rs`.
281    fn set_bool(&mut self, node: NodeKey, name: &str, value: bool) -> Result<(), ParameterError>;
282
283    /// See `ParameterServer::set_integer` in `server.rs`.
284    fn set_integer(&mut self, node: NodeKey, name: &str, value: i64) -> Result<(), ParameterError>;
285
286    /// See `ParameterServer::set_double` in `server.rs`.
287    fn set_double(&mut self, node: NodeKey, name: &str, value: f64) -> Result<(), ParameterError>;
288
289    /// See `ParameterServer::set_string` in `server.rs`.
290    fn set_string(&mut self, node: NodeKey, name: &str, value: &str) -> Result<(), ParameterError>;
291
292    /// See `ParameterServer::declare_parameter` in `server.rs`.
293    fn declare_parameter(
294        &mut self,
295        node: NodeKey,
296        descriptor: ParameterDescriptor,
297        initial_value: Option<&ParameterValue>,
298    ) -> Result<(), ParameterError>;
299
300    /// See `ParameterServer::get_parameter_value` in `server.rs`.
301    fn get_parameter_value(&self, node: NodeKey, name: &str) -> Option<ParameterValue>;
302
303    /// See `ParameterServer::set_parameter_value` in `server.rs`.
304    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}