github.com/joey-fossa/fossa-cli@v0.7.34-0.20190708193710-569f1e8679f0/cmd/fossa/display/template.go (about)

     1  package display
     2  
     3  import (
     4  	"strings"
     5  	"text/tabwriter"
     6  	"text/template"
     7  
     8  	"github.com/fossas/fossa-cli/errors"
     9  )
    10  
    11  // TemplateFile renders a template file and its context to string.
    12  func TemplateFile(filename string, data interface{}) (string, error) {
    13  	tmpl, err := template.ParseFiles(filename)
    14  	if err != nil {
    15  		return "", errors.Wrap(err, "Could not parse template data")
    16  	}
    17  
    18  	return Template(tmpl, data)
    19  }
    20  
    21  // TemplateString renders a template from a string template.
    22  func TemplateString(templateString string, data interface{}) (string, error) {
    23  	tmpl, err := template.New("base").Parse(templateString)
    24  	if err != nil {
    25  		return "", errors.Wrap(err, "Could not parse template data")
    26  	}
    27  	return Template(tmpl, data)
    28  }
    29  
    30  // Template renders a template and its context to a string.
    31  func Template(tmpl *template.Template, data interface{}) (string, error) {
    32  	var builder strings.Builder
    33  	err := tmpl.Execute(&builder, data)
    34  	if err != nil {
    35  		return "", err
    36  	}
    37  
    38  	return builder.String(), nil
    39  }
    40  
    41  // TemplateFormatTabs renders a template with the desired tab format.
    42  func TemplateFormatTabs(tmpl string, data interface{}, minWidth, tabWidth, padding int) (string, error) {
    43  	testTemplate, err := template.New("base").Parse(tmpl)
    44  	if err != nil {
    45  		return "", errors.Wrap(err, "Could not parse template data")
    46  	}
    47  
    48  	var builder strings.Builder
    49  	w := tabwriter.NewWriter(&builder, minWidth, tabWidth, padding, ' ', 0)
    50  	err = testTemplate.Execute(w, data)
    51  	if err != nil {
    52  		return "", err
    53  	}
    54  
    55  	return builder.String(), nil
    56  }