github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/cmd/plugins/juju-metadata/listformatter.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package main
     5  
     6  import (
     7  	"bytes"
     8  	"fmt"
     9  	"strings"
    10  	"text/tabwriter"
    11  
    12  	"github.com/juju/errors"
    13  )
    14  
    15  func formatMetadataListTabular(value interface{}) ([]byte, error) {
    16  	metadata, ok := value.([]MetadataInfo)
    17  	if !ok {
    18  		return nil, errors.Errorf("expected value of type %T, got %T", metadata, value)
    19  	}
    20  	return formatMetadataTabular(metadata)
    21  }
    22  
    23  // formatMetadataTabular returns a tabular summary of cloud image metadata.
    24  func formatMetadataTabular(metadata []MetadataInfo) ([]byte, error) {
    25  	var out bytes.Buffer
    26  
    27  	const (
    28  		// To format things into columns.
    29  		minwidth = 0
    30  		tabwidth = 1
    31  		padding  = 2
    32  		padchar  = ' '
    33  		flags    = 0
    34  	)
    35  	tw := tabwriter.NewWriter(&out, minwidth, tabwidth, padding, padchar, flags)
    36  	print := func(values ...string) {
    37  		fmt.Fprintln(tw, strings.Join(values, "\t"))
    38  	}
    39  	print("SOURCE", "SERIES", "ARCH", "REGION", "IMAGE-ID", "STREAM", "VIRT-TYPE", "STORAGE-TYPE")
    40  
    41  	for _, m := range metadata {
    42  		print(m.Source, m.Series, m.Arch, m.Region, m.ImageId, m.Stream, m.VirtType, m.RootStorageType)
    43  	}
    44  	tw.Flush()
    45  
    46  	return out.Bytes(), nil
    47  }