Skip to content

Commit e1e97fc

Browse files
committed
Make interface for global methods
1 parent e1afbbe commit e1e97fc

File tree

2 files changed

+46
-6
lines changed

2 files changed

+46
-6
lines changed

Source/buildimplementationrust.go

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

Source/languagerust.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,14 @@ func generateRustParameterType(param ComponentDefinitionParam, isPlain bool) (st
355355
if isPlain {
356356
RustParamTypeName = fmt.Sprintf("Handle")
357357
} else {
358-
// TODO
359-
return "", fmt.Errorf("%s Not yet handled", param.ParamType)
358+
switch param.ParamPass {
359+
case "out":
360+
RustParamTypeName = fmt.Sprintf("&mut impl %s", ParamClass)
361+
case "in":
362+
RustParamTypeName = fmt.Sprintf("& impl %s", ParamClass)
363+
case "return":
364+
RustParamTypeName = fmt.Sprintf("Box<dyn %s>", ParamClass)
365+
}
360366
}
361367

362368
default:

0 commit comments

Comments
 (0)