mirror of https://github.com/docker/cli.git
71 lines
1.5 KiB
Go
71 lines
1.5 KiB
Go
package formatter
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/docker/cli/cli/command/formatter"
|
|
)
|
|
|
|
const (
|
|
// SwarmStackTableFormat is the default Swarm stack format
|
|
SwarmStackTableFormat formatter.Format = "table {{.Name}}\t{{.Services}}"
|
|
|
|
stackServicesHeader = "SERVICES"
|
|
|
|
// TableFormatKey is an alias for formatter.TableFormatKey
|
|
TableFormatKey = formatter.TableFormatKey
|
|
)
|
|
|
|
// Context is an alias for formatter.Context
|
|
type Context = formatter.Context
|
|
|
|
// Format is an alias for formatter.Format
|
|
type Format = formatter.Format
|
|
|
|
// Stack contains deployed stack information.
|
|
type Stack struct {
|
|
// Name is the name of the stack
|
|
Name string
|
|
// Services is the number of the services
|
|
Services int
|
|
}
|
|
|
|
// StackWrite writes formatted stacks using the Context
|
|
func StackWrite(ctx formatter.Context, stacks []*Stack) error {
|
|
render := func(format func(subContext formatter.SubContext) error) error {
|
|
for _, stack := range stacks {
|
|
if err := format(&stackContext{s: stack}); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
return ctx.Write(newStackContext(), render)
|
|
}
|
|
|
|
type stackContext struct {
|
|
formatter.HeaderContext
|
|
s *Stack
|
|
}
|
|
|
|
func newStackContext() *stackContext {
|
|
stackCtx := stackContext{}
|
|
stackCtx.Header = formatter.SubHeaderContext{
|
|
"Name": formatter.NameHeader,
|
|
"Services": stackServicesHeader,
|
|
}
|
|
return &stackCtx
|
|
}
|
|
|
|
func (s *stackContext) MarshalJSON() ([]byte, error) {
|
|
return formatter.MarshalJSON(s)
|
|
}
|
|
|
|
func (s *stackContext) Name() string {
|
|
return s.s.Name
|
|
}
|
|
|
|
func (s *stackContext) Services() string {
|
|
return strconv.Itoa(s.s.Services)
|
|
}
|