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 }