go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/cli/printer/printer.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package printer
     5  
     6  import (
     7  	"bytes"
     8  	"fmt"
     9  	"strings"
    10  
    11  	"github.com/muesli/termenv"
    12  	"go.mondoo.com/cnquery/cli/theme/colors"
    13  )
    14  
    15  // Printer turns code into human-readable strings
    16  type Printer struct {
    17  	Primary   func(...interface{}) string
    18  	Secondary func(...interface{}) string
    19  	Yellow    func(...interface{}) string
    20  	Error     func(...interface{}) string
    21  	Warn      func(...interface{}) string
    22  	Disabled  func(...interface{}) string
    23  	Failed    func(...interface{}) string
    24  	Success   func(...interface{}) string
    25  }
    26  
    27  // DefaultPrinter that can be used without additional configuration
    28  var DefaultPrinter = Printer{
    29  	Primary: func(args ...interface{}) string {
    30  		return termenv.String(fmt.Sprint(args...)).Foreground(colors.DefaultColorTheme.Primary).String()
    31  	},
    32  	Secondary: func(args ...interface{}) string {
    33  		return termenv.String(fmt.Sprint(args...)).Foreground(colors.DefaultColorTheme.Secondary).String()
    34  	},
    35  	Error: func(args ...interface{}) string {
    36  		return termenv.String("error: " + fmt.Sprint(args...)).Foreground(colors.DefaultColorTheme.Error).String()
    37  	},
    38  	Warn: func(args ...interface{}) string {
    39  		return termenv.String("warning: " + fmt.Sprint(args...)).Foreground(colors.DefaultColorTheme.Low).String()
    40  	},
    41  	Yellow: func(args ...interface{}) string {
    42  		return termenv.String(fmt.Sprint(args...)).Foreground(colors.DefaultColorTheme.Low).String()
    43  	},
    44  	Disabled: func(args ...interface{}) string {
    45  		return termenv.String(fmt.Sprint(args...)).Foreground(colors.DefaultColorTheme.Disabled).String()
    46  	},
    47  	Failed: func(args ...interface{}) string {
    48  		return termenv.String(fmt.Sprint(args...)).Foreground(colors.DefaultColorTheme.Critical).String()
    49  	},
    50  	Success: func(args ...interface{}) string {
    51  		return termenv.String(fmt.Sprint(args...)).Foreground(colors.DefaultColorTheme.Success).String()
    52  	},
    53  }
    54  
    55  // PlainNoColorPrinter is a printer without colors
    56  var PlainNoColorPrinter = Printer{
    57  	Primary:   fmt.Sprint,
    58  	Secondary: fmt.Sprint,
    59  	Error:     fmt.Sprint,
    60  	Warn:      fmt.Sprint,
    61  	Disabled:  fmt.Sprint,
    62  	Failed:    fmt.Sprint,
    63  }
    64  
    65  // H1 prints a headline
    66  func (print *Printer) H1(headline string) string {
    67  	var res bytes.Buffer
    68  	res.WriteString(print.Primary(headline))
    69  	res.WriteString("\n")
    70  	res.WriteString(print.Primary(strings.Repeat("=", len(headline))))
    71  	res.WriteString("\n\n")
    72  	return res.String()
    73  }
    74  
    75  // H2 prints a headline
    76  func (print *Printer) H2(headline string) string {
    77  	var res bytes.Buffer
    78  	res.WriteString(print.Primary(headline))
    79  	res.WriteString("\n")
    80  	res.WriteString(print.Primary(strings.Repeat("-", len(headline))))
    81  	res.WriteString("\n\n")
    82  	return res.String()
    83  }