diff --git a/v3/examples/binding/GreetService.go b/v3/examples/binding/GreetService.go index 3a9695d67..fa69f192d 100644 --- a/v3/examples/binding/GreetService.go +++ b/v3/examples/binding/GreetService.go @@ -8,10 +8,16 @@ type Person struct { type GreetService struct { } +// Greet greets a person +// +//wails:methodID 1 func (*GreetService) Greet(name string) string { return "Hello " + name } +// GreetPerson greets a person +// +//wails:methodID 2 func (*GreetService) GreetPerson(person Person) string { return "Hello " + person.name } diff --git a/v3/examples/binding/bindings_main.js b/v3/examples/binding/bindings_main.js index 9e03a2fd7..71dd5aa04 100644 --- a/v3/examples/binding/bindings_main.js +++ b/v3/examples/binding/bindings_main.js @@ -10,19 +10,19 @@ window.go.main = { /** * GreetService.Greet - * + * Greet greets a person * @param name {string} * @returns {Promise} **/ - Greet: function(name) { wails.CallByID(1411160069, ...Array.prototype.slice.call(arguments, 0)); }, + Greet: function(name) { wails.CallByID(1, ...Array.prototype.slice.call(arguments, 0)); }, /** * GreetService.GreetPerson - * + * GreetPerson greets a person * @param person {main.Person} * @returns {Promise} **/ - GreetPerson: function(person) { wails.CallByID(4021313248, ...Array.prototype.slice.call(arguments, 0)); }, + GreetPerson: function(person) { wails.CallByID(2, ...Array.prototype.slice.call(arguments, 0)); }, }, }; diff --git a/v3/examples/binding/main.go b/v3/examples/binding/main.go index 872e6fbdc..53eaf2de6 100644 --- a/v3/examples/binding/main.go +++ b/v3/examples/binding/main.go @@ -16,10 +16,6 @@ func main() { Bind: []any{ &GreetService{}, }, - BindAliases: map[uint32]uint32{ - 1: 1411160069, - 2: 4021313248, - }, Assets: application.AssetOptions{ FS: assets, }, diff --git a/v3/internal/parser/parser.go b/v3/internal/parser/parser.go index 0cab18ab4..b1ef51520 100644 --- a/v3/internal/parser/parser.go +++ b/v3/internal/parser/parser.go @@ -2,6 +2,7 @@ package parser import ( "fmt" + "github.com/samber/lo" "github.com/wailsapp/wails/v3/internal/hash" "go/ast" "go/build" @@ -81,6 +82,7 @@ type BoundMethod struct { Inputs []*Parameter Outputs []*Parameter ID uint32 + Alias *uint32 } func (m BoundMethod) IDAsString() string { @@ -394,6 +396,21 @@ func (p *Project) parseBoundStructMethods(name string, pkg *ParsedPackage) error if ok { if ident, ok := recvType.X.(*ast.Ident); ok && ident.Name == name { fqn := fmt.Sprintf("%s.%s.%s", pkg.Path, name, funcDecl.Name.Name) + + var alias *uint32 + var err error + // Check for the text `wails:methodID ` + for _, docstring := range funcDecl.Doc.List { + if strings.Contains(docstring.Text, "//wails:methodID") { + idString := strings.TrimSpace(strings.TrimPrefix(docstring.Text, "//wails:methodID")) + parsedID, err := strconv.ParseUint(idString, 10, 32) + if err != nil { + return fmt.Errorf("invalid value in `wails:methodID` directive: '%s'. Expected a valid uint32 value", idString) + } + alias = lo.ToPtr(uint32(parsedID)) + break + } + } id, err := hash.Fnv(fqn) if err != nil { return err @@ -403,6 +420,7 @@ func (p *Project) parseBoundStructMethods(name string, pkg *ParsedPackage) error ID: id, Name: funcDecl.Name.Name, DocComment: funcDecl.Doc.Text(), + Alias: alias, } if funcDecl.Type.Params != nil {