mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-04 21:50:32 +08:00

* 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>
71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package render
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/wailsapp/wails/v3/internal/generator/collect"
|
|
)
|
|
|
|
// modelInfo gathers useful information about a model.
|
|
type modelInfo struct {
|
|
HasValues bool
|
|
IsEnum bool
|
|
|
|
IsAlias bool
|
|
IsClassAlias bool
|
|
IsTypeAlias bool
|
|
|
|
IsClassOrInterface bool
|
|
IsInterface bool
|
|
IsClass bool
|
|
|
|
Template struct {
|
|
Params string
|
|
ParamList string
|
|
CreateList string
|
|
}
|
|
}
|
|
|
|
// modelinfo gathers and returns useful information about the given model.
|
|
func modelinfo(model *collect.ModelInfo, useInterfaces bool) (info modelInfo) {
|
|
info.HasValues = len(model.Values) > 0
|
|
info.IsEnum = info.HasValues && !model.Alias
|
|
|
|
info.IsAlias = !info.IsEnum && model.Type != nil
|
|
info.IsClassAlias = info.IsAlias && model.Predicates.IsClass && !useInterfaces
|
|
info.IsTypeAlias = info.IsAlias && !info.IsClassAlias
|
|
|
|
info.IsClassOrInterface = !info.IsEnum && !info.IsAlias
|
|
info.IsInterface = info.IsClassOrInterface && (model.Alias || useInterfaces)
|
|
info.IsClass = info.IsClassOrInterface && !info.IsInterface
|
|
|
|
if len(model.TypeParams) > 0 {
|
|
var params, paramList, createList strings.Builder
|
|
|
|
paramList.WriteRune('<')
|
|
createList.WriteRune('(')
|
|
|
|
for i, param := range model.TypeParams {
|
|
if i > 0 {
|
|
params.WriteRune(',')
|
|
paramList.WriteString(", ")
|
|
createList.WriteString(", ")
|
|
}
|
|
params.WriteString(param)
|
|
paramList.WriteString(param)
|
|
|
|
createList.WriteString("$$createParam")
|
|
createList.WriteString(param)
|
|
}
|
|
|
|
paramList.WriteRune('>')
|
|
createList.WriteRune(')')
|
|
|
|
info.Template.Params = params.String()
|
|
info.Template.ParamList = paramList.String()
|
|
info.Template.CreateList = createList.String()
|
|
}
|
|
|
|
return
|
|
}
|