mirror of https://github.com/fluxcd/flux2.git
				
				
				
			Merge pull request #2512 from souleb/introduce-printer-interface
Introduce a printer interface for flux resourcespull/2530/head
						commit
						c5171a1f2e
					
				| @ -0,0 +1,56 @@ | ||||
| /* | ||||
| Copyright 2022 The Flux authors | ||||
| 
 | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
| 
 | ||||
|     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| 
 | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| package printers | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 
 | ||||
| 	"github.com/homeport/dyff/pkg/dyff" | ||||
| ) | ||||
| 
 | ||||
| // DyffPrinter is a printer that prints dyff reports.
 | ||||
| type DyffPrinter struct { | ||||
| 	OmitHeader bool | ||||
| } | ||||
| 
 | ||||
| // NewDyffPrinter returns a new DyffPrinter.
 | ||||
| func NewDyffPrinter() *DyffPrinter { | ||||
| 	return &DyffPrinter{ | ||||
| 		OmitHeader: true, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Print prints the given args to the given writer.
 | ||||
| func (p *DyffPrinter) Print(w io.Writer, args ...interface{}) error { | ||||
| 	for _, arg := range args { | ||||
| 		switch arg := arg.(type) { | ||||
| 		case dyff.Report: | ||||
| 			reportWriter := &dyff.HumanReport{ | ||||
| 				Report:     arg, | ||||
| 				OmitHeader: p.OmitHeader, | ||||
| 			} | ||||
| 
 | ||||
| 			if err := reportWriter.WriteReport(w); err != nil { | ||||
| 				return fmt.Errorf("failed to print report: %w", err) | ||||
| 			} | ||||
| 		default: | ||||
| 			return fmt.Errorf("unsupported type %T", arg) | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| @ -0,0 +1,33 @@ | ||||
| /* | ||||
| Copyright 2022 The Flux authors | ||||
| 
 | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
| 
 | ||||
|     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| 
 | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| package printers | ||||
| 
 | ||||
| import "io" | ||||
| 
 | ||||
| // Printer is an interface for printing Flux cmd	outputs.
 | ||||
| type Printer interface { | ||||
| 	// Print prints the given args to the given writer.
 | ||||
| 	Print(io.Writer, ...interface{}) error | ||||
| } | ||||
| 
 | ||||
| // PrinterFunc is a function that can print args to a writer.
 | ||||
| type PrinterFunc func(w io.Writer, args ...interface{}) error | ||||
| 
 | ||||
| // Print implements Printer
 | ||||
| func (fn PrinterFunc) Print(w io.Writer, args ...interface{}) error { | ||||
| 	return fn(w, args) | ||||
| } | ||||
| @ -0,0 +1,65 @@ | ||||
| /* | ||||
| Copyright 2022 The Flux authors | ||||
| 
 | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
| 
 | ||||
|     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| 
 | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| package printers | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 
 | ||||
| 	"github.com/olekukonko/tablewriter" | ||||
| ) | ||||
| 
 | ||||
| // TablePrinter is a printer that prints Flux cmd	outputs.
 | ||||
| func TablePrinter(header []string) PrinterFunc { | ||||
| 	return func(w io.Writer, args ...interface{}) error { | ||||
| 		var rows [][]string | ||||
| 		for _, arg := range args { | ||||
| 			switch arg := arg.(type) { | ||||
| 			case []interface{}: | ||||
| 				for _, v := range arg { | ||||
| 					s, ok := v.([][]string) | ||||
| 					if !ok { | ||||
| 						return fmt.Errorf("unsupported type %T", v) | ||||
| 					} | ||||
| 					for i := range s { | ||||
| 						rows = append(rows, s[i]) | ||||
| 					} | ||||
| 				} | ||||
| 			default: | ||||
| 				return fmt.Errorf("unsupported type %T", arg) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		table := tablewriter.NewWriter(w) | ||||
| 		table.SetHeader(header) | ||||
| 		table.SetAutoWrapText(false) | ||||
| 		table.SetAutoFormatHeaders(true) | ||||
| 		table.SetHeaderAlignment(tablewriter.ALIGN_LEFT) | ||||
| 		table.SetAlignment(tablewriter.ALIGN_LEFT) | ||||
| 		table.SetCenterSeparator("") | ||||
| 		table.SetColumnSeparator("") | ||||
| 		table.SetRowSeparator("") | ||||
| 		table.SetHeaderLine(false) | ||||
| 		table.SetBorder(false) | ||||
| 		table.SetTablePadding("\t") | ||||
| 		table.SetNoWhiteSpace(true) | ||||
| 		table.AppendBulk(rows) | ||||
| 		table.Render() | ||||
| 
 | ||||
| 		return nil | ||||
| 	} | ||||
| } | ||||
					Loading…
					
					
				
		Reference in New Issue