mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-04 12:40:11 +08:00
78 lines
1.9 KiB
Go
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
|
|
}
|