5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-08 07:59:42 +08:00
wails/v3/internal/generator/testcases/aliases/main.go
Fabio Massaioli 37673eb24d
[v3] Fix binding generator bugs and prepare for Go 1.24 (#4045)
* Rename predicates source file

* Overhaul and document type predicates

* Fix model collection logic for named types

* Fix map key type rendering

* Fix map creation code

* Fix rendering of structs that implement marshaler interfaces

* Fix type cycle detection to take type args into account

* Fix enum and typeparam field initialisation

* Improve unsupported type warnings

* Remove internal models file

* Deduplicate template code

* Accept generic aliases in static analyser

* Support new `encoding/json` flag `omitzero`

* Handle special cases when rendering generic aliases

* Update npm test dependencies

* Test class aliases and implicit private dependencies

* Test marshaler combinations

* Test map key types

* Remove bad map keys from unrelated tests

* Test service discovery through generic aliases

* Test generic aliases

* Test warning messages

* Disable go1.24 tests

* Update changelog

* Restore rendering of injected lines in index file

* Test directives

* Add wails:ignore directive

* Fix typo

* Move injections to the bottom of service files

* Handle errors from closing files

* Do not emit messages when services define only lifecycle methods

* Add internal directive for services and models

* Update changelog

* Fix error in service templates

* Test internal directive on services/models

* Fix error in index template

* Base testdata updates

* Testdata for class aliases and implicit private dependencies

* Testdata for marshaler combinations

* Testdata for map key types

* Testdata for bad map key fixes

* Add weakly typed enums aka alias constants

* Testdata for enum and typeparam field fixes

* Testdata for generic aliases

* Testdata for warning messages

* Testdata for directives

* Testdata for weakly typed enums

* Update binding example

* Update services example

* Remove go1.24 testdata

* Update cli doc

* Fix analyser tests

* Fix windows tests... hopefully

* go mod tidy on examples

* Update bindings guide

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-02-09 09:44:34 +11:00

137 lines
3.2 KiB
Go

package main
import (
_ "embed"
"log"
nobindingshere "github.com/wailsapp/wails/v3/internal/generator/testcases/no_bindings_here"
"github.com/wailsapp/wails/v3/pkg/application"
)
// GreetService is great
type GreetService int
// A nice type Alias.
type Alias = int
// A class alias.
type AliasedPerson = Person
// An empty struct alias.
type EmptyAliasStruct = struct{}
// A struct alias.
// This should be rendered as a typedef or interface in every mode.
type AliasStruct = struct {
// A field with a comment.
Foo []int
Bar, Baz string `json:",omitempty"` // Definitely not Foo.
Other OtherAliasStruct // A nested alias struct.
}
// Another struct alias.
type OtherAliasStruct = struct {
NoMoreIdeas []rune
}
// An empty struct.
type EmptyStruct struct{}
// A non-generic struct containing an alias.
type Person struct {
Name string // The Person's name.
AliasedField Alias // A random alias field.
}
// A generic struct containing an alias.
type GenericPerson[T any] struct {
Name T
AliasedField Alias
}
// Another class alias, but ordered after its aliased class.
type StrangelyAliasedPerson = Person
// A generic alias that forwards to a type parameter.
// type GenericAlias[T any] = T
// A generic alias that wraps a pointer type.
// type GenericPtrAlias[T any] = *GenericAlias[T]
// A generic alias that wraps a map.
// type GenericMapAlias[T interface {
// comparable
// encoding.TextMarshaler
// }, U any] = map[T]U
// A generic alias that wraps a generic struct.
// type GenericPersonAlias[T any] = GenericPerson[[]GenericPtrAlias[T]]
// An alias that wraps a class through a non-typeparam alias.
// type IndirectPersonAlias = GenericPersonAlias[bool]
// An alias that wraps a class through a typeparam alias.
// type TPIndirectPersonAlias = GenericAlias[GenericPerson[bool]]
// A class whose fields have various aliased types.
// type AliasGroup struct {
// GAi GenericAlias[int]
// GAP GenericAlias[GenericPerson[bool]]
// GPAs GenericPtrAlias[[]string]
// GPAP GenericPtrAlias[GenericPerson[[]int]]
// GMA GenericMapAlias[struct{ encoding.TextMarshaler }, float32]
// GPA GenericPersonAlias[bool]
// IPA IndirectPersonAlias
// TPIPA TPIndirectPersonAlias
// }
// Get someone.
func (GreetService) Get(aliasValue Alias) Person {
return Person{"hello", aliasValue}
}
// Get someone quite different.
func (GreetService) GetButDifferent() GenericPerson[bool] {
return GenericPerson[bool]{true, 13}
}
// Apparently, aliases are all the rage right now.
func (GreetService) GetButAliased(p AliasedPerson) StrangelyAliasedPerson {
return p
}
func (GreetService) GetButForeignPrivateAlias() (_ nobindingshere.PrivatePerson) {
return
}
// func (GreetService) GetButGenericAliases() (_ AliasGroup) {
// return
// }
// Greet a lot of unusual things.
func (GreetService) Greet(EmptyAliasStruct, EmptyStruct) AliasStruct {
return AliasStruct{}
}
func NewGreetService() application.Service {
return application.NewService(new(GreetService))
}
func main() {
app := application.New(application.Options{
Services: []application.Service{
NewGreetService(),
},
})
app.NewWebviewWindow()
err := app.Run()
if err != nil {
log.Fatal(err)
}
}