// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: BUSL-1.1 package command import ( "fmt" "github.com/hashicorp/cli" version "github.com/hashicorp/go-version" "github.com/hashicorp/terraform/internal/initwd" ) type view interface { Log(message string, params ...any) } type uiModuleInstallHooks struct { initwd.ModuleInstallHooksImpl Ui cli.Ui ShowLocalPaths bool View view } var _ initwd.ModuleInstallHooks = uiModuleInstallHooks{} func (h uiModuleInstallHooks) Download(modulePath, packageAddr string, v *version.Version) { if v != nil { h.log(fmt.Sprintf("Downloading %s %s for %s...", packageAddr, v, modulePath)) } else { h.log(fmt.Sprintf("Downloading %s for %s...", packageAddr, modulePath)) } } func (h uiModuleInstallHooks) Install(modulePath string, v *version.Version, localDir string) { if h.ShowLocalPaths { h.log(fmt.Sprintf("- %s in %s", modulePath, localDir)) } else { h.log(fmt.Sprintf("- %s", modulePath)) } } func (h uiModuleInstallHooks) log(message string) { switch h.View.(type) { case view: // there is no unformatted option for the View interface, so we need to // pass message as a parameter to avoid double escaping % characters h.View.Log("%s", message) default: h.Ui.Info(message) } }