12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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)
- }
|