package formatter import ( "strconv" ) const ( defaultStackTableFormat = "table {{.Name}}\t{{.Services}}" stackServicesHeader = "SERVICES" ) // 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 } // NewStackFormat returns a format for use with a stack Context func NewStackFormat(source string) Format { switch source { case TableFormatKey: return defaultStackTableFormat } return Format(source) } // StackWrite writes formatted stacks using the Context func StackWrite(ctx Context, stacks []*Stack) error { render := func(format func(subContext 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 { HeaderContext s *Stack } func newStackContext() *stackContext { stackCtx := stackContext{} stackCtx.header = map[string]string{ "Name": nameHeader, "Services": stackServicesHeader, } return &stackCtx } func (s *stackContext) MarshalJSON() ([]byte, error) { return marshalJSON(s) } func (s *stackContext) Name() string { return s.s.Name } func (s *stackContext) Services() string { return strconv.Itoa(s.s.Services) }