github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/cli/command/formatter/plugin.go (about)

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