resource-generator: SubParams nested fix (Соннет) — AlignParamTypes recursive, HasNestedParams/NeedsStrings skip array-map-fixed, bump 5.0.74
This commit is contained in:
@@ -66,6 +66,21 @@ func AlignParamTypes(params []types.Param, schema []types.Param) []types.Param {
|
||||
}
|
||||
}
|
||||
|
||||
// Рекурсивно выравниваем SubParams (например cpu может быть string в modify, но int64 в create).
|
||||
schemaByCode := make(map[string]types.Param, len(schema))
|
||||
for _, p := range schema {
|
||||
schemaByCode[strings.ToLower(strings.TrimSpace(p.Code))] = p
|
||||
}
|
||||
for i, p := range params {
|
||||
if !p.HasSubParams {
|
||||
continue
|
||||
}
|
||||
key := strings.ToLower(strings.TrimSpace(p.Code))
|
||||
if sp, ok := schemaByCode[key]; ok && len(sp.SubParams) > 0 {
|
||||
params[i].SubParams = AlignParamTypes(p.SubParams, sp.SubParams)
|
||||
}
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
@@ -231,6 +246,42 @@ func AnalyzeJsonPlanMod(params []types.Param) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// HasNestedParams возвращает true, если есть nested (только map-fixed, не array-map-fixed) параметры.
|
||||
func HasNestedParams(params []types.Param) bool {
|
||||
for _, p := range params {
|
||||
if p.HasSubParams && !strings.Contains(strings.ToLower(p.Type), "array") {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// AnalyzeNestedDefaults проверяет sub-params nested-параметров на наличие default'ов.
|
||||
// Возвращает true если найдены nested параметры.
|
||||
func AnalyzeNestedDefaults(needsBoolDefault *bool, needsInt64Default *bool, needsStringDefault *bool, params []types.Param) bool {
|
||||
found := false
|
||||
for _, p := range params {
|
||||
if len(p.SubParams) == 0 {
|
||||
continue
|
||||
}
|
||||
found = true
|
||||
for _, sp := range p.SubParams {
|
||||
if sp.Default == "" {
|
||||
continue
|
||||
}
|
||||
switch strings.ToLower(sp.Type) {
|
||||
case "bool":
|
||||
*needsBoolDefault = true
|
||||
case "int64", "int", "number":
|
||||
*needsInt64Default = true
|
||||
default:
|
||||
*needsStringDefault = true
|
||||
}
|
||||
}
|
||||
}
|
||||
return found
|
||||
}
|
||||
|
||||
// HasRestoreCasingParams возвращает true, если есть ref_svc-параметры (кроме S3).
|
||||
func HasRestoreCasingParams(params []types.Param) bool {
|
||||
for _, p := range params {
|
||||
@@ -244,6 +295,10 @@ func HasRestoreCasingParams(params []types.Param) bool {
|
||||
// AnalyzeNeedsStrings возвращает true, если есть строковые параметры.
|
||||
func AnalyzeNeedsStrings(params []types.Param) bool {
|
||||
for _, p := range params {
|
||||
// Пропускаем IsNested (map-fixed без array): они не участвуют в strings.EqualFold
|
||||
if p.HasSubParams && !strings.Contains(strings.ToLower(p.Type), "array") {
|
||||
continue
|
||||
}
|
||||
t := strings.ToLower(strings.TrimSpace(p.Type))
|
||||
if t != "bool" && t != "int" && t != "int64" && t != "number" {
|
||||
return true
|
||||
|
||||
Reference in New Issue
Block a user