1- // crates/powerlink-rs-xdc/src/resolver/app_process.rs
2-
31//! Handles resolving the `ApplicationProcess` block from the model to public types.
2+ //!
3+ //! The Application Process section defines the device's parameters, templates, data types,
4+ //! and function blocks. It is the most complex part of the XDC schema due to its
5+ //! hierarchical nature.
46
57use crate :: error:: XdcError ;
68use crate :: model;
79use crate :: model:: app_process:: { AppDataTypeChoice , ParameterGroupItem } ;
8- use crate :: resolver:: utils; // Import the utils module
10+ use crate :: resolver:: utils;
911use crate :: types;
1012use alloc:: string:: String ;
1113use alloc:: vec:: Vec ;
1214
13- /// Helper to extract the name of a `ParameterDataType` enum .
15+ /// Helper to extract the string name of a `ParameterDataType`.
1416fn get_data_type_name ( data_type : & model:: app_process:: ParameterDataType ) -> String {
1517 use model:: app_process:: ParameterDataType :: * ;
1618 match data_type {
@@ -33,12 +35,13 @@ fn get_data_type_name(data_type: &model::app_process::ParameterDataType) -> Stri
3335 LREAL => "LREAL" . into ( ) ,
3436 STRING => "STRING" . into ( ) ,
3537 WSTRING => "WSTRING" . into ( ) ,
38+ // For references, we return the referenced ID.
3639 DataTypeIDRef ( r) => r. unique_id_ref . clone ( ) ,
3740 VariableRef ( _) => "variableRef" . into ( ) ,
3841 }
3942}
4043
41- /// Maps the model's ParameterDataType to the public types::ParameterDataType .
44+ /// Maps the model's internal ` ParameterDataType` enum to the public API's enum .
4245fn resolve_parameter_data_type (
4346 model : & model:: app_process:: ParameterDataType ,
4447) -> types:: ParameterDataType {
@@ -69,9 +72,9 @@ fn resolve_parameter_data_type(
6972 }
7073}
7174
72- // --- Main Resolver ---
73-
74- /// Resolves the `model::ApplicationProcess` into the public ` types::ApplicationProcess` .
75+ /// Resolves the entire `model::ApplicationProcess` into the public `types::ApplicationProcess`.
76+ ///
77+ /// This function processes lists of data types, templates, parameters, groups, and functions .
7578pub ( super ) fn resolve_application_process (
7679 model : & model:: app_process:: ApplicationProcess ,
7780) -> Result < types:: ApplicationProcess , XdcError > {
@@ -112,7 +115,6 @@ pub(super) fn resolve_application_process(
112115 } )
113116}
114117
115- /// Helper to resolve a `model::app_process::Value` to `types::Value`.
116118fn resolve_value ( model : & model:: app_process:: Value ) -> types:: Value {
117119 types:: Value {
118120 value : model. value . clone ( ) ,
@@ -125,7 +127,6 @@ fn resolve_value(model: &model::app_process::Value) -> types::Value {
125127 }
126128}
127129
128- /// Helper to resolve `model::app_process::AllowedValues` to `types::AllowedValues`.
129130fn resolve_allowed_values ( model : & model:: app_process:: AllowedValues ) -> types:: AllowedValues {
130131 types:: AllowedValues {
131132 template_id_ref : model. template_id_ref . clone ( ) ,
@@ -142,7 +143,6 @@ fn resolve_allowed_values(model: &model::app_process::AllowedValues) -> types::A
142143 }
143144}
144145
145- /// Helper to resolve a single `model::app_process::Parameter` into `types::Parameter`.
146146fn resolve_parameter ( model : & model:: app_process:: Parameter ) -> Result < types:: Parameter , XdcError > {
147147 Ok ( types:: Parameter {
148148 unique_id : model. unique_id . clone ( ) ,
@@ -153,7 +153,6 @@ fn resolve_parameter(model: &model::app_process::Parameter) -> Result<types::Par
153153 multiplier : model. multiplier . clone ( ) ,
154154 template_id_ref : model. template_id_ref . clone ( ) ,
155155 data_type : resolve_parameter_data_type ( & model. data_type ) ,
156- // `labels` is Glabels (not Option) here (from model/app_process.rs)
157156 label : utils:: extract_label ( & model. labels . items ) ,
158157 description : utils:: extract_description ( & model. labels . items ) ,
159158 actual_value : model. actual_value . as_ref ( ) . map ( resolve_value) ,
@@ -162,25 +161,22 @@ fn resolve_parameter(model: &model::app_process::Parameter) -> Result<types::Par
162161 } )
163162}
164163
165- /// Helper to resolve the `<parameterList>`.
166164fn resolve_parameter_list (
167165 list : & model:: app_process:: ParameterList ,
168166) -> Result < Vec < types:: Parameter > , XdcError > {
169167 list. parameter . iter ( ) . map ( resolve_parameter) . collect ( )
170168}
171169
172- /// Helper to resolve the `<templateList>`.
173170fn resolve_template_list (
174171 list : & model:: app_process:: TemplateList ,
175172) -> Result < Vec < types:: Parameter > , XdcError > {
176- // parameterTemplate is identical to parameter in structure
173+ // Parameter templates have the same structure as parameters.
177174 list. parameter_template
178175 . iter ( )
179176 . map ( resolve_parameter)
180177 . collect ( )
181178}
182179
183- /// Helper to resolve the `<dataTypeList>`.
184180fn resolve_data_type_list (
185181 list : & model:: app_process:: AppDataTypeList ,
186182) -> Result < Vec < types:: AppDataType > , XdcError > {
@@ -195,7 +191,6 @@ fn resolve_data_type_list(
195191 . collect ( )
196192}
197193
198- /// Helper to resolve a `<struct>`.
199194fn resolve_struct ( model : & model:: app_process:: AppStruct ) -> Result < types:: AppStruct , XdcError > {
200195 let members = model
201196 . var_declaration
@@ -206,7 +201,6 @@ fn resolve_struct(model: &model::app_process::AppStruct) -> Result<types::AppStr
206201 unique_id : var. unique_id . clone ( ) ,
207202 data_type : get_data_type_name ( & var. data_type ) ,
208203 size : var. size . as_ref ( ) . and_then ( |s| s. parse :: < u32 > ( ) . ok ( ) ) ,
209- // `labels` is Glabels
210204 label : utils:: extract_label ( & var. labels . items ) ,
211205 description : utils:: extract_description ( & var. labels . items ) ,
212206 } )
@@ -216,14 +210,12 @@ fn resolve_struct(model: &model::app_process::AppStruct) -> Result<types::AppStr
216210 Ok ( types:: AppStruct {
217211 name : model. name . clone ( ) ,
218212 unique_id : model. unique_id . clone ( ) ,
219- // `labels` is Glabels
220213 label : utils:: extract_label ( & model. labels . items ) ,
221214 description : utils:: extract_description ( & model. labels . items ) ,
222215 members,
223216 } )
224217}
225218
226- /// Helper to resolve an `<array>`.
227219fn resolve_array ( model : & model:: app_process:: AppArray ) -> Result < types:: AppArray , XdcError > {
228220 let subrange = model. subrange . first ( ) . ok_or ( XdcError :: MissingElement {
229221 element : "subrange" ,
@@ -232,7 +224,6 @@ fn resolve_array(model: &model::app_process::AppArray) -> Result<types::AppArray
232224 Ok ( types:: AppArray {
233225 name : model. name . clone ( ) ,
234226 unique_id : model. unique_id . clone ( ) ,
235- // `labels` is Glabels
236227 label : utils:: extract_label ( & model. labels . items ) ,
237228 description : utils:: extract_description ( & model. labels . items ) ,
238229 lower_limit : subrange. lower_limit . parse ( ) . unwrap_or ( 0 ) ,
@@ -241,13 +232,11 @@ fn resolve_array(model: &model::app_process::AppArray) -> Result<types::AppArray
241232 } )
242233}
243234
244- /// Helper to resolve an `<enum>`.
245235fn resolve_enum ( model : & model:: app_process:: AppEnum ) -> Result < types:: AppEnum , XdcError > {
246236 let values = model
247237 . enum_value
248238 . iter ( )
249239 . map ( |val| types:: EnumValue {
250- // `labels` is Glabels
251240 name : utils:: extract_label ( & val. labels . items ) . unwrap_or_default ( ) ,
252241 value : val. value . clone ( ) . unwrap_or_default ( ) ,
253242 label : utils:: extract_label ( & val. labels . items ) ,
@@ -258,7 +247,6 @@ fn resolve_enum(model: &model::app_process::AppEnum) -> Result<types::AppEnum, X
258247 Ok ( types:: AppEnum {
259248 name : model. name . clone ( ) ,
260249 unique_id : model. unique_id . clone ( ) ,
261- // `labels` is Glabels
262250 label : utils:: extract_label ( & model. labels . items ) ,
263251 description : utils:: extract_description ( & model. labels . items ) ,
264252 data_type : model
@@ -271,7 +259,6 @@ fn resolve_enum(model: &model::app_process::AppEnum) -> Result<types::AppEnum, X
271259 } )
272260}
273261
274- /// Helper to resolve a `<derived>` type.
275262fn resolve_derived ( model : & model:: app_process:: AppDerived ) -> Result < types:: AppDerived , XdcError > {
276263 let count = model. count . as_ref ( ) . map ( |c| types:: Count {
277264 unique_id : c. unique_id . clone ( ) ,
@@ -282,15 +269,13 @@ fn resolve_derived(model: &model::app_process::AppDerived) -> Result<types::AppD
282269 Ok ( types:: AppDerived {
283270 name : model. name . clone ( ) ,
284271 unique_id : model. unique_id . clone ( ) ,
285- // `labels` is Glabels
286272 label : utils:: extract_label ( & model. labels . items ) ,
287273 description : utils:: extract_description ( & model. labels . items ) ,
288274 data_type : get_data_type_name ( & model. data_type ) ,
289275 count,
290276 } )
291277}
292278
293- /// Helper to resolve the `<parameterGroupList>`.
294279fn resolve_parameter_group_list (
295280 list : & model:: app_process:: ParameterGroupList ,
296281) -> Result < Vec < types:: ParameterGroup > , XdcError > {
@@ -300,7 +285,6 @@ fn resolve_parameter_group_list(
300285 . collect ( )
301286}
302287
303- /// Helper to recursively resolve a `<parameterGroup>`.
304288fn resolve_parameter_group (
305289 model : & model:: app_process:: ParameterGroup ,
306290) -> Result < types:: ParameterGroup , XdcError > {
@@ -324,14 +308,12 @@ fn resolve_parameter_group(
324308
325309 Ok ( types:: ParameterGroup {
326310 unique_id : model. unique_id . clone ( ) ,
327- // `labels` is Glabels
328311 label : utils:: extract_label ( & model. labels . items ) ,
329312 description : utils:: extract_description ( & model. labels . items ) ,
330313 items,
331314 } )
332315}
333316
334- /// Helper to resolve `<functionTypeList>`.
335317fn resolve_function_type_list (
336318 list : & model:: app_process:: FunctionTypeList ,
337319) -> Result < Vec < types:: FunctionType > , XdcError > {
@@ -341,7 +323,6 @@ fn resolve_function_type_list(
341323 . collect ( )
342324}
343325
344- /// Helper to resolve a single `<functionType>`.
345326fn resolve_function_type (
346327 model : & model:: app_process:: FunctionType ,
347328) -> Result < types:: FunctionType , XdcError > {
@@ -353,7 +334,6 @@ fn resolve_function_type(
353334 version : v. version . clone ( ) ,
354335 author : v. author . clone ( ) ,
355336 date : v. date . clone ( ) ,
356- // `labels` is Glabels
357337 label : utils:: extract_label ( & v. labels . items ) ,
358338 description : utils:: extract_description ( & v. labels . items ) ,
359339 } )
@@ -365,15 +345,13 @@ fn resolve_function_type(
365345 name : model. name . clone ( ) ,
366346 unique_id : model. unique_id . clone ( ) ,
367347 package : model. package . clone ( ) ,
368- // `labels` is Glabels
369348 label : utils:: extract_label ( & model. labels . items ) ,
370349 description : utils:: extract_description ( & model. labels . items ) ,
371350 version_info,
372351 interface,
373352 } )
374353}
375354
376- /// Helper to resolve an `<interfaceList>`.
377355fn resolve_interface_list (
378356 model : & model:: app_process:: InterfaceList ,
379357) -> Result < types:: InterfaceList , XdcError > {
@@ -405,7 +383,6 @@ fn resolve_interface_list(
405383 } )
406384}
407385
408- /// Helper to resolve a `<varDeclaration>`.
409386fn resolve_var_declaration (
410387 model : & model:: app_process:: VarDeclaration ,
411388) -> Result < types:: VarDeclaration , XdcError > {
@@ -415,13 +392,11 @@ fn resolve_var_declaration(
415392 data_type : get_data_type_name ( & model. data_type ) ,
416393 size : model. size . as_ref ( ) . and_then ( |s| s. parse :: < u32 > ( ) . ok ( ) ) ,
417394 initial_value : model. initial_value . clone ( ) ,
418- // `labels` is Glabels
419395 label : utils:: extract_label ( & model. labels . items ) ,
420396 description : utils:: extract_description ( & model. labels . items ) ,
421397 } )
422398}
423399
424- /// Helper to resolve `<functionInstanceList>`.
425400fn resolve_function_instance_list (
426401 list : & model:: app_process:: FunctionInstanceList ,
427402) -> Result < Vec < types:: FunctionInstance > , XdcError > {
@@ -432,7 +407,6 @@ fn resolve_function_instance_list(
432407 name : inst. name . clone ( ) ,
433408 unique_id : inst. unique_id . clone ( ) ,
434409 type_id_ref : inst. type_id_ref . clone ( ) ,
435- // `labels` is Glabels
436410 label : utils:: extract_label ( & inst. labels . items ) ,
437411 description : utils:: extract_description ( & inst. labels . items ) ,
438412 } )
0 commit comments