You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terraformDummyRepo2/vendor/github.com/hashicorp/terraform-plugin-docs/internal/cmd/run.go

103 lines
1.8 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package cmd
import (
"fmt"
"io"
"os"
"github.com/mitchellh/cli"
)
type commonCmd struct {
ui cli.Ui
}
func (cmd *commonCmd) run(r func() error) int {
err := r()
if err != nil {
// TODO: unwraps? check for special exit code error?
cmd.ui.Error(fmt.Sprintf("Error executing command: %s\n", err))
os.Exit(1)
}
return 0
}
func initCommands(ui cli.Ui) map[string]cli.CommandFactory {
generateFactory := func() (cli.Command, error) {
return &generateCmd{
commonCmd: commonCmd{
ui: ui,
},
}, nil
}
defaultFactory := func() (cli.Command, error) {
return &defaultCmd{
synopsis: "the generate command is run by default",
Command: &generateCmd{
commonCmd: commonCmd{
ui: ui,
},
},
}, nil
}
validateFactory := func() (cli.Command, error) {
return &validateCmd{
commonCmd: commonCmd{
ui: ui,
},
}, nil
}
return map[string]cli.CommandFactory{
"": defaultFactory,
"generate": generateFactory,
"validate": validateFactory,
//"serve": serveFactory,
}
}
type defaultCmd struct {
cli.Command
synopsis string
}
func (cmd *defaultCmd) Synopsis() string {
return cmd.synopsis
}
func Run(name, version string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
var ui cli.Ui = &cli.ColoredUi{
ErrorColor: cli.UiColorRed,
WarnColor: cli.UiColorYellow,
Ui: &cli.BasicUi{
Reader: stdin,
Writer: stdout,
ErrorWriter: stderr,
},
}
commands := initCommands(ui)
cli := cli.CLI{
Name: name,
Args: args,
Commands: commands,
HelpFunc: cli.BasicHelpFunc(name),
HelpWriter: stderr,
Version: version,
}
exitCode, err := cli.Run()
if err != nil {
return 1
}
return exitCode
}