| // 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() { | |
| } |