5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-08 07:59:42 +08:00
wails/v3/internal/generator/testcases/marshalers/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

210 lines
5.1 KiB
Go

package main
import (
_ "embed"
"encoding"
"encoding/json"
"log"
"github.com/wailsapp/wails/v3/pkg/application"
)
type Service struct{}
// class {}
type NonMarshaler struct{}
// any
type ValueJsonMarshaler struct{}
func (ValueJsonMarshaler) MarshalJSON() ([]byte, error) { return nil, nil }
// any
type PointerJsonMarshaler struct{}
func (*PointerJsonMarshaler) MarshalJSON() ([]byte, error) { return nil, nil }
// string
type ValueTextMarshaler struct{}
func (ValueTextMarshaler) MarshalText() ([]byte, error) { return nil, nil }
// string
type PointerTextMarshaler struct{}
func (*PointerTextMarshaler) MarshalText() ([]byte, error) { return nil, nil }
// any
type ValueMarshaler struct{}
func (ValueMarshaler) MarshalJSON() ([]byte, error) { return nil, nil }
func (ValueMarshaler) MarshalText() ([]byte, error) { return nil, nil }
// any
type PointerMarshaler struct{}
func (*PointerMarshaler) MarshalJSON() ([]byte, error) { return nil, nil }
func (*PointerMarshaler) MarshalText() ([]byte, error) { return nil, nil }
// any
type UnderlyingJsonMarshaler struct{ json.Marshaler }
// string
type UnderlyingTextMarshaler struct{ encoding.TextMarshaler }
// any
type UnderlyingMarshaler struct {
json.Marshaler
encoding.TextMarshaler
}
type customJsonMarshaler interface {
MarshalJSON() ([]byte, error)
}
type customTextMarshaler interface {
MarshalText() ([]byte, error)
}
type customMarshaler interface {
MarshalJSON() ([]byte, error)
MarshalText() ([]byte, error)
}
// struct{}
type AliasNonMarshaler = struct{}
// any
type AliasJsonMarshaler = struct{ json.Marshaler }
// string
type AliasTextMarshaler = struct{ encoding.TextMarshaler }
// any
type AliasMarshaler = struct {
json.Marshaler
encoding.TextMarshaler
}
// any
type ImplicitJsonMarshaler UnderlyingJsonMarshaler
// string
type ImplicitTextMarshaler UnderlyingTextMarshaler
// any
type ImplicitMarshaler UnderlyingMarshaler
// string
type ImplicitNonJson UnderlyingMarshaler
func (ImplicitNonJson) MarshalJSON() {}
// any
type ImplicitNonText UnderlyingMarshaler
func (ImplicitNonText) MarshalText() {}
// class{ Marshaler, TextMarshaler }
type ImplicitNonMarshaler UnderlyingMarshaler
func (ImplicitNonMarshaler) MarshalJSON() {}
func (ImplicitNonMarshaler) MarshalText() {}
// any
type ImplicitJsonButText UnderlyingJsonMarshaler
func (ImplicitJsonButText) MarshalText() ([]byte, error) { return nil, nil }
// any
type ImplicitTextButJson UnderlyingTextMarshaler
func (ImplicitTextButJson) MarshalJSON() ([]byte, error) { return nil, nil }
type Data struct {
NM NonMarshaler
NMPtr *NonMarshaler // NonMarshaler | null
VJM ValueJsonMarshaler
VJMPtr *ValueJsonMarshaler // ValueJsonMarshaler | null
PJM PointerJsonMarshaler
PJMPtr *PointerJsonMarshaler // PointerJsonMarshaler | null
VTM ValueTextMarshaler
VTMPtr *ValueTextMarshaler // ValueTextMarshaler | null
PTM PointerTextMarshaler
PTMPtr *PointerTextMarshaler // PointerTextMarshaler | null
VM ValueMarshaler
VMPtr *ValueMarshaler // ValueMarshaler | null
PM PointerMarshaler
PMPtr *PointerMarshaler // PointerMarshaler | null
UJM UnderlyingJsonMarshaler
UJMPtr *UnderlyingJsonMarshaler // UnderlyingJsonMarshaler | null
UTM UnderlyingTextMarshaler
UTMPtr *UnderlyingTextMarshaler // UnderlyingTextMarshaler | null
UM UnderlyingMarshaler
UMPtr *UnderlyingMarshaler // UnderlyingMarshaler | null
JM struct{ json.Marshaler } // any
JMPtr *struct{ json.Marshaler } // any | null
TM struct{ encoding.TextMarshaler } // string
TMPtr *struct{ encoding.TextMarshaler } // string | null
CJM struct{ customJsonMarshaler } // any
CJMPtr *struct{ customJsonMarshaler } // any | null
CTM struct{ customTextMarshaler } // string
CTMPtr *struct{ customTextMarshaler } // string | null
CM struct{ customMarshaler } // any
CMPtr *struct{ customMarshaler } // any | null
ANM AliasNonMarshaler
ANMPtr *AliasNonMarshaler // AliasNonMarshaler | null
AJM AliasJsonMarshaler
AJMPtr *AliasJsonMarshaler // AliasJsonMarshaler | null
ATM AliasTextMarshaler
ATMPtr *AliasTextMarshaler // AliasTextMarshaler | null
AM AliasMarshaler
AMPtr *AliasMarshaler // AliasMarshaler | null
ImJM ImplicitJsonMarshaler
ImJMPtr *ImplicitJsonMarshaler // ImplicitJsonMarshaler | null
ImTM ImplicitTextMarshaler
ImTMPtr *ImplicitTextMarshaler // ImplicitTextMarshaler | null
ImM ImplicitMarshaler
ImMPtr *ImplicitMarshaler // ImplicitMarshaler | null
ImNJ ImplicitNonJson
ImNJPtr *ImplicitNonJson // ImplicitNonJson | null
ImNT ImplicitNonText
ImNTPtr *ImplicitNonText // ImplicitNonText | null
ImNM ImplicitNonMarshaler
ImNMPtr *ImplicitNonMarshaler // ImplicitNonMarshaler | null
ImJbT ImplicitJsonButText
ImJbTPtr *ImplicitJsonButText // ImplicitJsonButText | null
ImTbJ ImplicitTextButJson
ImTbJPtr *ImplicitTextButJson // ImplicitTextButJson | null
}
func (*Service) Method() (_ Data) {
return
}
func main() {
app := application.New(application.Options{
Services: []application.Service{
application.NewService(&Service{}),
},
})
app.NewWebviewWindow()
err := app.Run()
if err != nil {
log.Fatal(err)
}
}