5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-04 12:40:11 +08:00
wails/v3/internal/generator/render/info.go
2025-02-26 16:57:16 +01:00

78 lines
1.9 KiB
Go

package render
import (
"regexp"
"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
}
}
// createParamRegex must match type parameter creation strings as generated by [modelinfo].
var createParamRegex = regexp.MustCompile(`\$\$createParam[^\s,)]*`)
// 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 {
param = typeparam(i, param)
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
}