@@ -7,6 +7,7 @@ pub trait StructuredParametersMeta<T>: Sized {
7
7
node : & NodeState ,
8
8
name : & str ,
9
9
default : Option < T > ,
10
+ description : impl Into < std:: sync:: Arc < str > > ,
10
11
) -> core:: result:: Result < Self , crate :: DeclarationError > ;
11
12
}
12
13
@@ -15,11 +16,12 @@ pub trait StructuredParameters: Sized {
15
16
node : & NodeState ,
16
17
name : & str ,
17
18
default : Option < T > ,
19
+ description : impl Into < std:: sync:: Arc < str > > ,
18
20
) -> core:: result:: Result < Self , crate :: DeclarationError >
19
21
where
20
22
Self : StructuredParametersMeta < T > ,
21
23
{
22
- Self :: declare_structured_ ( node, name, default)
24
+ Self :: declare_structured_ ( node, name, default, description )
23
25
}
24
26
}
25
27
impl < T : crate :: ParameterVariant > StructuredParameters for crate :: MandatoryParameter < T > { }
@@ -28,13 +30,14 @@ impl<T: crate::ParameterVariant> StructuredParametersMeta<T> for crate::Mandator
28
30
node : & NodeState ,
29
31
name : & str ,
30
32
default : Option < T > ,
33
+ description : impl Into < std:: sync:: Arc < str > > ,
31
34
) -> core:: result:: Result < Self , crate :: DeclarationError > {
32
35
let builder = node. declare_parameter ( name) ;
33
36
let builder = match default {
34
37
Some ( default) => builder. default ( default) ,
35
38
None => builder,
36
39
} ;
37
- builder. mandatory ( )
40
+ builder. description ( description ) . mandatory ( )
38
41
}
39
42
}
40
43
impl < T : crate :: ParameterVariant > StructuredParameters for crate :: ReadOnlyParameter < T > { }
@@ -43,13 +46,14 @@ impl<T: crate::ParameterVariant> StructuredParametersMeta<T> for crate::ReadOnly
43
46
node : & NodeState ,
44
47
name : & str ,
45
48
default : Option < T > ,
49
+ description : impl Into < std:: sync:: Arc < str > > ,
46
50
) -> core:: result:: Result < Self , crate :: DeclarationError > {
47
51
let builder = node. declare_parameter ( name) ;
48
52
let builder = match default {
49
53
Some ( default) => builder. default ( default) ,
50
54
None => builder,
51
55
} ;
52
- builder. read_only ( )
56
+ builder. description ( description ) . read_only ( )
53
57
}
54
58
}
55
59
impl < T : crate :: ParameterVariant > StructuredParameters for crate :: OptionalParameter < T > { }
@@ -58,13 +62,14 @@ impl<T: crate::ParameterVariant> StructuredParametersMeta<T> for crate::Optional
58
62
node : & NodeState ,
59
63
name : & str ,
60
64
default : Option < T > ,
65
+ description : impl Into < std:: sync:: Arc < str > > ,
61
66
) -> core:: result:: Result < Self , crate :: DeclarationError > {
62
67
let builder = node. declare_parameter ( name) ;
63
68
let builder = match default {
64
69
Some ( default) => builder. default ( default) ,
65
70
None => builder,
66
71
} ;
67
- builder. optional ( )
72
+ builder. description ( description ) . optional ( )
68
73
}
69
74
}
70
75
@@ -76,7 +81,7 @@ impl NodeState {
76
81
where
77
82
T : StructuredParameters + StructuredParametersMeta < T0 > ,
78
83
{
79
- T :: declare_structured ( self , name, None )
84
+ T :: declare_structured ( self , name, None , "" )
80
85
}
81
86
}
82
87
@@ -171,4 +176,27 @@ mod tests {
171
176
let _params: SimpleStructuredParametersWithDefaults = node. declare_parameters ( "" ) . unwrap ( ) ;
172
177
println ! ( "{:?}" , _params) ;
173
178
}
179
+ #[ derive( Debug , StructuredParameters ) ]
180
+ struct SimpleStructuredParametersWithDefaultsAndDescriptions {
181
+ #[ param( default = 42.0 , description = "_mandatory" ) ]
182
+ _mandatory : rclrs:: MandatoryParameter < f64 > ,
183
+ #[ param( default = 42.0 , description = "_optional" ) ]
184
+ _optional : rclrs:: OptionalParameter < f64 > ,
185
+ #[ param( default = Arc :: from( "test" ) , description = "_readonly" ) ]
186
+ _readonly : rclrs:: ReadOnlyParameter < Arc < str > > ,
187
+ }
188
+
189
+ #[ test]
190
+ fn test_simple_structured_parameters_with_defaults_and_descriptions ( ) {
191
+ let args: Vec < String > = [ "test" , "--ros-args" ]
192
+ . into_iter ( )
193
+ . map ( str:: to_string)
194
+ . collect ( ) ;
195
+ let context = crate :: Context :: new ( args, rclrs:: InitOptions :: default ( ) ) . unwrap ( ) ;
196
+ let exec = context. create_basic_executor ( ) ;
197
+ let node = exec. create_node ( rclrs:: NodeOptions :: new ( "test" ) ) . unwrap ( ) ;
198
+ let _params: SimpleStructuredParametersWithDefaultsAndDescriptions =
199
+ node. declare_parameters ( "" ) . unwrap ( ) ;
200
+ println ! ( "{:?}" , _params) ;
201
+ }
174
202
}
0 commit comments