Add pretty printing, complete Makefile
This commit is contained in:
		
							
								
								
									
										75
									
								
								cmd/eia-client/internal/util/util_pretty.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								cmd/eia-client/internal/util/util_pretty.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
package util
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"github.com/fatih/color"
 | 
			
		||||
	"github.com/goccy/go-yaml/lexer"
 | 
			
		||||
	"github.com/goccy/go-yaml/printer"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const escape = "\x1b"
 | 
			
		||||
 | 
			
		||||
type PrettyOpts struct {
 | 
			
		||||
	Bytes       []byte
 | 
			
		||||
	LineNumbers bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PrettyBytes(opts *PrettyOpts) []byte {
 | 
			
		||||
	tokens := lexer.Tokenize(string(opts.Bytes))
 | 
			
		||||
	var p printer.Printer
 | 
			
		||||
	p.LineNumber = opts.LineNumbers
 | 
			
		||||
	p.LineNumberFormat = func(num int) string {
 | 
			
		||||
		fn := color.New(color.Bold, color.FgHiWhite).SprintFunc()
 | 
			
		||||
		return fn(fmt.Sprintf("%2d | ", num))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	p.Bool = func() *printer.Property {
 | 
			
		||||
		return &printer.Property{
 | 
			
		||||
			Prefix: format(color.FgHiMagenta),
 | 
			
		||||
			Suffix: format(color.Reset),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	p.Number = func() *printer.Property {
 | 
			
		||||
		return &printer.Property{
 | 
			
		||||
			Prefix: format(color.FgHiMagenta),
 | 
			
		||||
			Suffix: format(color.Reset),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	p.MapKey = func() *printer.Property {
 | 
			
		||||
		return &printer.Property{
 | 
			
		||||
			Prefix: format(color.FgHiCyan),
 | 
			
		||||
			Suffix: format(color.Reset),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	p.Anchor = func() *printer.Property {
 | 
			
		||||
		return &printer.Property{
 | 
			
		||||
			Prefix: format(color.FgHiYellow),
 | 
			
		||||
			Suffix: format(color.Reset),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	p.Alias = func() *printer.Property {
 | 
			
		||||
		return &printer.Property{
 | 
			
		||||
			Prefix: format(color.FgHiYellow),
 | 
			
		||||
			Suffix: format(color.Reset),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	p.String = func() *printer.Property {
 | 
			
		||||
		return &printer.Property{
 | 
			
		||||
			Prefix: format(color.FgHiGreen),
 | 
			
		||||
			Suffix: format(color.Reset),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	p.Comment = func() *printer.Property {
 | 
			
		||||
		return &printer.Property{
 | 
			
		||||
			Prefix: format(color.FgHiBlack),
 | 
			
		||||
			Suffix: format(color.Reset),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return []byte(p.PrintTokens(tokens))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func format(attr color.Attribute) string {
 | 
			
		||||
	return fmt.Sprintf("%s[%dm", escape, attr)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user