github.com/thajeztah/cli@v0.0.0-20240223162942-dc6bfac81a8b/cli/command/plugin/formatter.go (about)

     1  package plugin
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/docker/cli/cli/command/formatter"
     7  	"github.com/docker/docker/api/types"
     8  	"github.com/docker/docker/pkg/stringid"
     9  )
    10  
    11  const (
    12  	defaultPluginTableFormat = "table {{.ID}}\t{{.Name}}\t{{.Description}}\t{{.Enabled}}"
    13  
    14  	enabledHeader  = "ENABLED"
    15  	pluginIDHeader = "ID"
    16  )
    17  
    18  // NewFormat returns a Format for rendering using a plugin Context
    19  func NewFormat(source string, quiet bool) formatter.Format {
    20  	switch source {
    21  	case formatter.TableFormatKey:
    22  		if quiet {
    23  			return formatter.DefaultQuietFormat
    24  		}
    25  		return defaultPluginTableFormat
    26  	case formatter.RawFormatKey:
    27  		if quiet {
    28  			return `plugin_id: {{.ID}}`
    29  		}
    30  		return `plugin_id: {{.ID}}\nname: {{.Name}}\ndescription: {{.Description}}\nenabled: {{.Enabled}}\n`
    31  	}
    32  	return formatter.Format(source)
    33  }
    34  
    35  // FormatWrite writes the context
    36  func FormatWrite(ctx formatter.Context, plugins []*types.Plugin) error {
    37  	render := func(format func(subContext formatter.SubContext) error) error {
    38  		for _, plugin := range plugins {
    39  			pluginCtx := &pluginContext{trunc: ctx.Trunc, p: *plugin}
    40  			if err := format(pluginCtx); err != nil {
    41  				return err
    42  			}
    43  		}
    44  		return nil
    45  	}
    46  	pluginCtx := pluginContext{}
    47  	pluginCtx.Header = formatter.SubHeaderContext{
    48  		"ID":              pluginIDHeader,
    49  		"Name":            formatter.NameHeader,
    50  		"Description":     formatter.DescriptionHeader,
    51  		"Enabled":         enabledHeader,
    52  		"PluginReference": formatter.ImageHeader,
    53  	}
    54  	return ctx.Write(&pluginCtx, render)
    55  }
    56  
    57  type pluginContext struct {
    58  	formatter.HeaderContext
    59  	trunc bool
    60  	p     types.Plugin
    61  }
    62  
    63  func (c *pluginContext) MarshalJSON() ([]byte, error) {
    64  	return formatter.MarshalJSON(c)
    65  }
    66  
    67  func (c *pluginContext) ID() string {
    68  	if c.trunc {
    69  		return stringid.TruncateID(c.p.ID)
    70  	}
    71  	return c.p.ID
    72  }
    73  
    74  func (c *pluginContext) Name() string {
    75  	return c.p.Name
    76  }
    77  
    78  func (c *pluginContext) Description() string {
    79  	desc := strings.ReplaceAll(c.p.Config.Description, "\n", "")
    80  	desc = strings.ReplaceAll(desc, "\r", "")
    81  	if c.trunc {
    82  		desc = formatter.Ellipsis(desc, 45)
    83  	}
    84  
    85  	return desc
    86  }
    87  
    88  func (c *pluginContext) Enabled() bool {
    89  	return c.p.Enabled
    90  }
    91  
    92  func (c *pluginContext) PluginReference() string {
    93  	return c.p.PluginReference
    94  }