github.com/cloudfoundry/cli@v7.1.0+incompatible/plugin/plugin_examples/echo.go (about)

     1  /**
     2  * This is an example plugin where we use both arguments and flags. The plugin
     3  * will echo all arguments passed to it. The flag -uppercase will upcase the
     4  * arguments passed to the command.
     5  **/
     6  package main
     7  
     8  import (
     9  	"flag"
    10  	"fmt"
    11  	"os"
    12  	"strings"
    13  
    14  	"code.cloudfoundry.org/cli/plugin"
    15  )
    16  
    17  type PluginDemonstratingParams struct {
    18  	uppercase *bool
    19  }
    20  
    21  func main() {
    22  	plugin.Start(new(PluginDemonstratingParams))
    23  }
    24  
    25  func (pluginDemo *PluginDemonstratingParams) Run(cliConnection plugin.CliConnection, args []string) {
    26  	// Initialize flags
    27  	echoFlagSet := flag.NewFlagSet("echo", flag.ExitOnError)
    28  	uppercase := echoFlagSet.Bool("uppercase", false, "displayes all provided text in uppercase")
    29  
    30  	// Parse starting from [1] because the [0]th element is the
    31  	// name of the command
    32  	err := echoFlagSet.Parse(args[1:])
    33  	if err != nil {
    34  		fmt.Println(err)
    35  		os.Exit(1)
    36  	}
    37  
    38  	var itemToEcho string
    39  	for _, value := range echoFlagSet.Args() {
    40  		if *uppercase {
    41  			itemToEcho += strings.ToUpper(value) + " "
    42  		} else {
    43  			itemToEcho += value + " "
    44  		}
    45  	}
    46  
    47  	fmt.Println(itemToEcho)
    48  }
    49  
    50  func (pluginDemo *PluginDemonstratingParams) GetMetadata() plugin.PluginMetadata {
    51  	return plugin.PluginMetadata{
    52  		Name: "EchoDemo",
    53  		Version: plugin.VersionType{
    54  			Major: 0,
    55  			Minor: 1,
    56  			Build: 4,
    57  		},
    58  		Commands: []plugin.Command{
    59  			{
    60  				Name:     "echo",
    61  				Alias:    "repeat",
    62  				HelpText: "Echo text passed into the command. To obtain more information use --help",
    63  				UsageDetails: plugin.Usage{
    64  					Usage: "echo - print input arguments to screen\n   cf echo [-uppercase] text",
    65  					Options: map[string]string{
    66  						"uppercase": "If this param is passed, which ever word is passed to echo will be all capitals.",
    67  					},
    68  				},
    69  			},
    70  		},
    71  	}
    72  }