@@ -141,6 +141,14 @@ func buildRustInterfaces(component ComponentDefinition, w LanguageWriter, ClassI
141141 return err
142142 }
143143 }
144+ w .Writeln ("/*************************************************************************************************************************" )
145+ w .Writeln (" Trait defined for global methods of %s" , NameSpace )
146+ w .Writeln ("**************************************************************************************************************************/" )
147+ w .Writeln ("" )
148+ err := writeRustGlobalTrait (component , w )
149+ if err != nil {
150+ return err
151+ }
144152 return nil
145153}
146154
@@ -186,7 +194,7 @@ func writeRustTrait(component ComponentDefinition, class ComponentDefinitionClas
186194 for j := 0 ; j < len (methods ); j ++ {
187195 method := methods [j ]
188196 w .Writeln ("" )
189- err := writeRustTraitFn (method , w )
197+ err := writeRustTraitFn (method , w , true )
190198 if err != nil {
191199 return err
192200 }
@@ -198,12 +206,15 @@ func writeRustTrait(component ComponentDefinition, class ComponentDefinitionClas
198206 return nil
199207}
200208
201- func writeRustTraitFn (method ComponentDefinitionMethod , w LanguageWriter ) error {
209+ func writeRustTraitFn (method ComponentDefinitionMethod , w LanguageWriter , hasSelf bool ) error {
202210 methodName := toSnakeCase (method .MethodName )
203211 w .Writeln ("// %s" , methodName )
204212 w .Writeln ("//" )
205213 w .Writeln ("// %s" , method .MethodDescription )
206- parameterString := "&mut self"
214+ parameterString := ""
215+ if hasSelf {
216+ parameterString += "&mut self"
217+ }
207218 returnType := ""
208219 for k := 0 ; k < len (method .Params ); k ++ {
209220 param := method .Params [k ]
@@ -213,7 +224,11 @@ func writeRustTraitFn(method ComponentDefinitionMethod, w LanguageWriter) error
213224 }
214225 RustParam := RustParams [0 ]
215226 if param .ParamPass != "return" {
216- parameterString += fmt .Sprintf (", %s : %s" , RustParam .ParamName , RustParam .ParamType )
227+ if parameterString == "" {
228+ parameterString += fmt .Sprintf ("%s : %s" , RustParam .ParamName , RustParam .ParamType )
229+ } else {
230+ parameterString += fmt .Sprintf (", %s : %s" , RustParam .ParamName , RustParam .ParamType )
231+ }
217232 } else {
218233 returnType = RustParam .ParamType
219234 }
@@ -227,3 +242,22 @@ func writeRustTraitFn(method ComponentDefinitionMethod, w LanguageWriter) error
227242 }
228243 return nil
229244}
245+
246+ func writeRustGlobalTrait (component ComponentDefinition , w LanguageWriter ) error {
247+ w .Writeln ("// Wrapper trait for global methods" )
248+ w .Writeln ("//" )
249+ w .Writeln ("trait Wrapper {" )
250+ w .AddIndentationLevel (1 )
251+ methods := component .Global .Methods
252+ for j := 0 ; j < len (methods ); j ++ {
253+ method := methods [j ]
254+ w .Writeln ("" )
255+ err := writeRustTraitFn (method , w , false )
256+ if err != nil {
257+ return err
258+ }
259+ }
260+ w .ResetIndentationLevel ()
261+ w .Writeln ("}" )
262+ return nil
263+ }
0 commit comments