You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terraform/internal/command/views/query.go

86 lines
1.6 KiB

// Copyright IBM Corp. 2014, 2026
// SPDX-License-Identifier: BUSL-1.1
package views
import (
"fmt"
"github.com/hashicorp/terraform/internal/command/arguments"
"github.com/hashicorp/terraform/internal/terraform"
"github.com/hashicorp/terraform/internal/tfdiags"
)
// Query renders outputs for query executions.
type Query interface {
Operation() Operation
Hooks() []terraform.Hook
Diagnostics(diags tfdiags.Diagnostics)
HelpPrompt()
}
func NewQuery(vt arguments.ViewType, view *View) Query {
switch vt {
case arguments.ViewJSON:
return &QueryJSON{
view: NewJSONView(view),
}
case arguments.ViewHuman:
return &QueryHuman{
view: view,
inAutomation: view.RunningInAutomation(),
}
default:
panic(fmt.Sprintf("unknown view type %v", vt))
}
}
type QueryHuman struct {
view *View
inAutomation bool
}
var _ Query = (*QueryHuman)(nil)
func (v *QueryHuman) Operation() Operation {
return NewQueryOperation(arguments.ViewHuman, v.inAutomation, v.view)
}
func (v *QueryHuman) Hooks() []terraform.Hook {
return []terraform.Hook{
NewUiHook(v.view),
}
}
func (v *QueryHuman) Diagnostics(diags tfdiags.Diagnostics) {
v.view.Diagnostics(diags)
}
func (v *QueryHuman) HelpPrompt() {
v.view.HelpPrompt("query")
}
type QueryJSON struct {
view *JSONView
}
var _ Query = (*QueryJSON)(nil)
func (v *QueryJSON) Operation() Operation {
return &QueryOperationJSON{view: v.view}
}
func (v *QueryJSON) Hooks() []terraform.Hook {
return []terraform.Hook{
newJSONHook(v.view),
}
}
func (v *QueryJSON) Diagnostics(diags tfdiags.Diagnostics) {
v.view.Diagnostics(diags)
}
func (v *QueryJSON) HelpPrompt() {
}