| package views |
| |
| import ( |
| "fmt" |
| |
| "github.com/hashicorp/terraform/internal/command/arguments" |
| "github.com/hashicorp/terraform/internal/terraform" |
| "github.com/hashicorp/terraform/internal/tfdiags" |
| ) |
| |
| // The Plan view is used for the plan command. |
| type Plan interface { |
| Operation() Operation |
| Hooks() []terraform.Hook |
| |
| Diagnostics(diags tfdiags.Diagnostics) |
| HelpPrompt() |
| } |
| |
| // NewPlan returns an initialized Plan implementation for the given ViewType. |
| func NewPlan(vt arguments.ViewType, view *View) Plan { |
| switch vt { |
| case arguments.ViewJSON: |
| return &PlanJSON{ |
| view: NewJSONView(view), |
| } |
| case arguments.ViewHuman: |
| return &PlanHuman{ |
| view: view, |
| inAutomation: view.RunningInAutomation(), |
| } |
| default: |
| panic(fmt.Sprintf("unknown view type %v", vt)) |
| } |
| } |
| |
| // The PlanHuman implementation renders human-readable text logs, suitable for |
| // a scrolling terminal. |
| type PlanHuman struct { |
| view *View |
| |
| inAutomation bool |
| } |
| |
| var _ Plan = (*PlanHuman)(nil) |
| |
| func (v *PlanHuman) Operation() Operation { |
| return NewOperation(arguments.ViewHuman, v.inAutomation, v.view) |
| } |
| |
| func (v *PlanHuman) Hooks() []terraform.Hook { |
| return []terraform.Hook{ |
| NewUiHook(v.view), |
| } |
| } |
| |
| func (v *PlanHuman) Diagnostics(diags tfdiags.Diagnostics) { |
| v.view.Diagnostics(diags) |
| } |
| |
| func (v *PlanHuman) HelpPrompt() { |
| v.view.HelpPrompt("plan") |
| } |
| |
| // The PlanJSON implementation renders streaming JSON logs, suitable for |
| // integrating with other software. |
| type PlanJSON struct { |
| view *JSONView |
| } |
| |
| var _ Plan = (*PlanJSON)(nil) |
| |
| func (v *PlanJSON) Operation() Operation { |
| return &OperationJSON{view: v.view} |
| } |
| |
| func (v *PlanJSON) Hooks() []terraform.Hook { |
| return []terraform.Hook{ |
| newJSONHook(v.view), |
| } |
| } |
| |
| func (v *PlanJSON) Diagnostics(diags tfdiags.Diagnostics) { |
| v.view.Diagnostics(diags) |
| } |
| |
| func (v *PlanJSON) HelpPrompt() { |
| } |