github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/dictionaryentry/describe.go (about)

     1  package dictionaryentry
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  
     7  	"github.com/fastly/go-fastly/v9/fastly"
     8  
     9  	"github.com/fastly/cli/pkg/argparser"
    10  	fsterr "github.com/fastly/cli/pkg/errors"
    11  	"github.com/fastly/cli/pkg/global"
    12  	"github.com/fastly/cli/pkg/text"
    13  )
    14  
    15  // DescribeCommand calls the Fastly API to describe a dictionary item.
    16  type DescribeCommand struct {
    17  	argparser.Base
    18  	argparser.JSONOutput
    19  
    20  	Input       fastly.GetDictionaryItemInput
    21  	serviceName argparser.OptionalServiceNameID
    22  }
    23  
    24  // NewDescribeCommand returns a usable command registered under the parent.
    25  func NewDescribeCommand(parent argparser.Registerer, g *global.Data) *DescribeCommand {
    26  	c := DescribeCommand{
    27  		Base: argparser.Base{
    28  			Globals: g,
    29  		},
    30  	}
    31  	c.CmdClause = parent.Command("describe", "Show detailed information about a Fastly edge dictionary item").Alias("get")
    32  
    33  	// Required.
    34  	c.CmdClause.Flag("dictionary-id", "Dictionary ID").Required().StringVar(&c.Input.DictionaryID)
    35  	c.CmdClause.Flag("key", "Dictionary item key").Required().StringVar(&c.Input.ItemKey)
    36  
    37  	// Optional.
    38  	c.RegisterFlagBool(c.JSONFlag()) // --json
    39  	c.RegisterFlag(argparser.StringFlagOpts{
    40  		Name:        argparser.FlagServiceIDName,
    41  		Description: argparser.FlagServiceIDDesc,
    42  		Dst:         &g.Manifest.Flag.ServiceID,
    43  		Short:       's',
    44  	})
    45  	c.RegisterFlag(argparser.StringFlagOpts{
    46  		Action:      c.serviceName.Set,
    47  		Name:        argparser.FlagServiceName,
    48  		Description: argparser.FlagServiceDesc,
    49  		Dst:         &c.serviceName.Value,
    50  	})
    51  
    52  	return &c
    53  }
    54  
    55  // Exec invokes the application logic for the command.
    56  func (c *DescribeCommand) Exec(_ io.Reader, out io.Writer) error {
    57  	if c.Globals.Verbose() && c.JSONOutput.Enabled {
    58  		return fsterr.ErrInvalidVerboseJSONCombo
    59  	}
    60  
    61  	serviceID, source, flag, err := argparser.ServiceID(c.serviceName, *c.Globals.Manifest, c.Globals.APIClient, c.Globals.ErrLog)
    62  	if err != nil {
    63  		return err
    64  	}
    65  	if c.Globals.Verbose() {
    66  		argparser.DisplayServiceID(serviceID, flag, source, out)
    67  	}
    68  
    69  	c.Input.ServiceID = serviceID
    70  
    71  	o, err := c.Globals.APIClient.GetDictionaryItem(&c.Input)
    72  	if err != nil {
    73  		c.Globals.ErrLog.AddWithContext(err, map[string]any{
    74  			"Service ID": serviceID,
    75  		})
    76  		return err
    77  	}
    78  
    79  	if ok, err := c.WriteJSON(out, o); ok {
    80  		return err
    81  	}
    82  
    83  	if !c.Globals.Verbose() {
    84  		fmt.Fprintf(out, "\nService ID: %s\n", c.Input.ServiceID)
    85  	}
    86  	text.PrintDictionaryItem(out, "", o)
    87  	return nil
    88  }