| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| package renderers | |
| import ( | |
| "fmt" | |
| "github.com/hashicorp/terraform/internal/command/jsonformat/computed" | |
| "github.com/hashicorp/terraform/internal/plans" | |
| ) | |
| var _ computed.DiffRenderer = (*unknownRenderer)(nil) | |
| func Unknown(before computed.Diff) computed.DiffRenderer { | |
| return &unknownRenderer{ | |
| before: before, | |
| } | |
| } | |
| type unknownRenderer struct { | |
| NoWarningsRenderer | |
| before computed.Diff | |
| } | |
| func (renderer unknownRenderer) RenderHuman(diff computed.Diff, indent int, opts computed.RenderHumanOpts) string { | |
| // the before renderer can be nil and not a create action when the provider | |
| // previously returned a null value for the computed attribute and is now | |
| // declaring they will recompute it as part of the next update. | |
| if diff.Action == plans.Create || renderer.before.Renderer == nil { | |
| return fmt.Sprintf("(known after apply)%s", forcesReplacement(diff.Replace, opts)) | |
| } | |
| beforeOpts := opts.Clone() | |
| // Never render null suffix for children of unknown changes. | |
| beforeOpts.OverrideNullSuffix = true | |
| if diff.Replace { | |
| // If we're displaying forces replacement for the overall unknown | |
| // change, then do not display it for the before specifically. | |
| beforeOpts.ForbidForcesReplacement = true | |
| } | |
| return fmt.Sprintf("%s -> (known after apply)%s", renderer.before.RenderHuman(indent, beforeOpts), forcesReplacement(diff.Replace, opts)) | |
| } |