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 }