mirror of
https://github.com/opentffoundation/opentf.git
synced 2025-12-21 10:47:34 -05:00
99 lines
2.9 KiB
Go
99 lines
2.9 KiB
Go
// Copyright (c) The OpenTofu Authors
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
// Copyright (c) 2023 HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package renderers
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"github.com/opentofu/opentofu/internal/command/jsonformat/computed"
|
|
)
|
|
|
|
// Blocks is a helper struct for collating the different kinds of blocks in a
|
|
// simple way for rendering.
|
|
type Blocks struct {
|
|
SingleBlocks map[string]computed.Diff
|
|
ListBlocks map[string][]computed.Diff
|
|
SetBlocks map[string][]computed.Diff
|
|
MapBlocks map[string]map[string]computed.Diff
|
|
|
|
// ReplaceBlocks and Before/AfterSensitiveBlocks carry forward the
|
|
// information about an entire group of blocks (eg. if all the blocks for a
|
|
// given list block are sensitive that isn't captured in the individual
|
|
// blocks as they are processed independently). These maps allow the
|
|
// renderer to check the metadata on the overall groups and respond
|
|
// accordingly.
|
|
|
|
ReplaceBlocks map[string]bool
|
|
BeforeSensitiveBlocks map[string]bool
|
|
AfterSensitiveBlocks map[string]bool
|
|
}
|
|
|
|
func (blocks *Blocks) GetAllKeys() []string {
|
|
var keys []string
|
|
for key := range blocks.SingleBlocks {
|
|
keys = append(keys, key)
|
|
}
|
|
for key := range blocks.ListBlocks {
|
|
keys = append(keys, key)
|
|
}
|
|
for key := range blocks.SetBlocks {
|
|
keys = append(keys, key)
|
|
}
|
|
for key := range blocks.MapBlocks {
|
|
keys = append(keys, key)
|
|
}
|
|
sort.Strings(keys)
|
|
return keys
|
|
}
|
|
|
|
func (blocks *Blocks) IsSingleBlock(key string) bool {
|
|
_, ok := blocks.SingleBlocks[key]
|
|
return ok
|
|
}
|
|
|
|
func (blocks *Blocks) IsListBlock(key string) bool {
|
|
_, ok := blocks.ListBlocks[key]
|
|
return ok
|
|
}
|
|
|
|
func (blocks *Blocks) IsMapBlock(key string) bool {
|
|
_, ok := blocks.MapBlocks[key]
|
|
return ok
|
|
}
|
|
|
|
func (blocks *Blocks) IsSetBlock(key string) bool {
|
|
_, ok := blocks.SetBlocks[key]
|
|
return ok
|
|
}
|
|
|
|
func (blocks *Blocks) AddSingleBlock(key string, diff computed.Diff, replace, beforeSensitive, afterSensitive bool) {
|
|
blocks.SingleBlocks[key] = diff
|
|
blocks.ReplaceBlocks[key] = replace
|
|
blocks.BeforeSensitiveBlocks[key] = beforeSensitive
|
|
blocks.AfterSensitiveBlocks[key] = afterSensitive
|
|
}
|
|
|
|
func (blocks *Blocks) AddAllListBlock(key string, diffs []computed.Diff, replace, beforeSensitive, afterSensitive bool) {
|
|
blocks.ListBlocks[key] = diffs
|
|
blocks.ReplaceBlocks[key] = replace
|
|
blocks.BeforeSensitiveBlocks[key] = beforeSensitive
|
|
blocks.AfterSensitiveBlocks[key] = afterSensitive
|
|
}
|
|
|
|
func (blocks *Blocks) AddAllSetBlock(key string, diffs []computed.Diff, replace, beforeSensitive, afterSensitive bool) {
|
|
blocks.SetBlocks[key] = diffs
|
|
blocks.ReplaceBlocks[key] = replace
|
|
blocks.BeforeSensitiveBlocks[key] = beforeSensitive
|
|
blocks.AfterSensitiveBlocks[key] = afterSensitive
|
|
}
|
|
|
|
func (blocks *Blocks) AddAllMapBlocks(key string, diffs map[string]computed.Diff, replace, beforeSensitive, afterSensitive bool) {
|
|
blocks.MapBlocks[key] = diffs
|
|
blocks.ReplaceBlocks[key] = replace
|
|
blocks.BeforeSensitiveBlocks[key] = beforeSensitive
|
|
blocks.AfterSensitiveBlocks[key] = afterSensitive
|
|
}
|