fix(docs-generator): array-map-fixed = jsonencode([...]) (StringAttribute, не объект); классификация по data_type, а не is_json
This commit is contained in:
@@ -376,7 +376,7 @@ func buildCreateParamsPage(spec types.ServiceSpec, nav string, version string) s
|
||||
// Якорь-ссылка для map-fixed/array-map-fixed с вложенными параметрами
|
||||
if p.HasSubParams && len(p.SubParams) > 0 && desc == "" {
|
||||
anchor := strings.ToLower(p.Code)
|
||||
if p.IsJson {
|
||||
if isNestedListParam(p) {
|
||||
desc = fmt.Sprintf("[Развернуть ↓](#%s-array-map-fixed)", anchor)
|
||||
} else {
|
||||
desc = fmt.Sprintf("[Развернуть ↓](#%s-map-fixed)", anchor)
|
||||
@@ -713,7 +713,7 @@ func formatParamOrBlock(p types.ParamSpec, indent string, requiredOnly bool) str
|
||||
// а SingleNestedAttribute в HCL — это аргумент (через `=`), НЕ блок.
|
||||
// Блочный синтаксис (`param { ... }`) ломает terraform validate:
|
||||
// "Unsupported block type ... Did you mean to define argument?".
|
||||
if p.HasSubParams && len(p.SubParams) > 0 && !p.IsJson {
|
||||
if p.HasSubParams && len(p.SubParams) > 0 && !isNestedListParam(p) {
|
||||
paramCode := ToSnake(p.Code)
|
||||
var b strings.Builder
|
||||
b.WriteString(fmt.Sprintf("%s%s = {\n", indent, paramCode))
|
||||
@@ -739,7 +739,7 @@ func formatParamOrBlock(p types.ParamSpec, indent string, requiredOnly bool) str
|
||||
// array-map-fixed: resource-generator объявляет такие поля как schema.StringAttribute
|
||||
// (JSON-строка), поэтому в доке это тоже аргумент-строка через jsonencode([...]),
|
||||
// а НЕ блок и НЕ dynamic-блок.
|
||||
if p.HasSubParams && len(p.SubParams) > 0 && p.IsJson {
|
||||
if p.HasSubParams && len(p.SubParams) > 0 && isNestedListParam(p) {
|
||||
paramCode := ToSnake(p.Code)
|
||||
var b strings.Builder
|
||||
b.WriteString(fmt.Sprintf("%s%s = jsonencode([\n", indent, paramCode))
|
||||
@@ -867,6 +867,22 @@ func isJsonType(p types.ParamSpec) bool {
|
||||
return strings.Contains(strings.ToLower(firstType(p)), "json")
|
||||
}
|
||||
|
||||
// isNestedListParam — аналог resource-generator helpers.IsNestedList.
|
||||
//
|
||||
// Параметр с подполями и типом-массивом (data_type: array-map-fixed).
|
||||
// resource-generator объявляет такие поля как schema.StringAttribute (JSON-строка),
|
||||
// а НЕ как SingleNestedAttribute, поэтому и в доке это строка:
|
||||
//
|
||||
// storage_config = jsonencode([{ ... }])
|
||||
//
|
||||
// Историческая ошибка: условие проверяло p.IsJson, но array-map-fixed приходит
|
||||
// с data_type=array-map-fixed (is_json не выставлен), поэтому поле попадало
|
||||
// в ветку map-fixed и рендерилось объектом — несовместимо со схемой.
|
||||
func isNestedListParam(p types.ParamSpec) bool {
|
||||
dtype := strings.ToLower(strings.TrimSpace(p.DataType) + " " + strings.TrimSpace(p.Type))
|
||||
return strings.Contains(dtype, "array")
|
||||
}
|
||||
|
||||
func defaultCell(value interface{}) string {
|
||||
if !hasDefault(value) {
|
||||
return ""
|
||||
@@ -1095,7 +1111,7 @@ func renderNestedParams(p types.ParamSpec) string {
|
||||
}
|
||||
var b strings.Builder
|
||||
label := p.Code
|
||||
if p.IsJson {
|
||||
if isNestedListParam(p) {
|
||||
label += " (array-map-fixed) — элемент"
|
||||
} else {
|
||||
label += " (map-fixed)"
|
||||
|
||||
Reference in New Issue
Block a user