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 }