Refactor printers
authorMikael Berthe <mikael@lilotux.net>
Tue, 09 May 2017 20:14:28 +0200
changeset 110 57843255fd1a
parent 109 912e72511084
child 111 863b61d682e1
Refactor printers
cmd/accounts.go
cmd/config.go
cmd/instance.go
cmd/media.go
cmd/notifications.go
cmd/search.go
cmd/status.go
cmd/stream.go
cmd/timelines.go
cmd/utils.go
printer/printer.go
--- a/cmd/accounts.go	Tue May 09 20:14:28 2017 +0200
+++ b/cmd/accounts.go	Tue May 09 20:14:28 2017 +0200
@@ -531,7 +531,7 @@
 		errPrint("Error: %s", err.Error())
 		os.Exit(1)
 	}
-	return p.PrintObj(obj, nil, "")
+	return p.printObj(obj)
 }
 
 // accountLookupUser tries to find a (single) user matching 'user'
--- a/cmd/config.go	Tue May 09 20:14:28 2017 +0200
+++ b/cmd/config.go	Tue May 09 20:14:28 2017 +0200
@@ -118,7 +118,7 @@
 		errPrint("Error: %v", err)
 		os.Exit(1)
 	}
-	return p.PrintObj(gClient.UserToken, nil, "")
+	return p.printObj(gClient.UserToken)
 }
 
 // configDisplayThemes lists the available themes
--- a/cmd/instance.go	Tue May 09 20:14:28 2017 +0200
+++ b/cmd/instance.go	Tue May 09 20:14:28 2017 +0200
@@ -73,7 +73,7 @@
 		errPrint("Error: %s", err.Error())
 		os.Exit(1)
 	}
-	return p.PrintObj(i, nil, "")
+	return p.printObj(i)
 }
 
 func instanceStats() error {
@@ -126,5 +126,5 @@
 		errPrint("Error: %s", err.Error())
 		os.Exit(1)
 	}
-	return p.PrintObj(obj, nil, "")
+	return p.printObj(obj)
 }
--- a/cmd/media.go	Tue May 09 20:14:28 2017 +0200
+++ b/cmd/media.go	Tue May 09 20:14:28 2017 +0200
@@ -54,7 +54,7 @@
 		errPrint("Error: %s", err.Error())
 		os.Exit(1)
 	}
-	return p.PrintObj(attachment, nil, "")
+	return p.printObj(attachment)
 }
 
 // uploadFile uploads a media file and returns the attachment ID
--- a/cmd/notifications.go	Tue May 09 20:14:28 2017 +0200
+++ b/cmd/notifications.go	Tue May 09 20:14:28 2017 +0200
@@ -103,5 +103,5 @@
 		errPrint("Error: %s", err.Error())
 		os.Exit(1)
 	}
-	return p.PrintObj(obj, nil, "")
+	return p.printObj(obj)
 }
--- a/cmd/search.go	Tue May 09 20:14:28 2017 +0200
+++ b/cmd/search.go	Tue May 09 20:14:28 2017 +0200
@@ -55,5 +55,5 @@
 		errPrint("Error: %s", err.Error())
 		os.Exit(1)
 	}
-	return p.PrintObj(results, nil, "")
+	return p.printObj(results)
 }
--- a/cmd/status.go	Tue May 09 20:14:28 2017 +0200
+++ b/cmd/status.go	Tue May 09 20:14:28 2017 +0200
@@ -275,5 +275,5 @@
 		errPrint("Error: %s", err.Error())
 		os.Exit(1)
 	}
-	return p.PrintObj(obj, nil, "")
+	return p.printObj(obj)
 }
--- a/cmd/stream.go	Tue May 09 20:14:28 2017 +0200
+++ b/cmd/stream.go	Tue May 09 20:14:28 2017 +0200
@@ -176,11 +176,11 @@
 				errPrint("Event: [%s]", ev.Event)
 			case "update":
 				s := ev.Data.(madon.Status)
-				p.PrintObj(&s, nil, "")
+				p.printObj(&s)
 				continue
 			case "notification":
 				n := ev.Data.(madon.Notification)
-				p.PrintObj(&n, nil, "")
+				p.printObj(&n)
 				continue
 			case "delete":
 				// TODO PrintObj ?
--- a/cmd/timelines.go	Tue May 09 20:14:28 2017 +0200
+++ b/cmd/timelines.go	Tue May 09 20:14:28 2017 +0200
@@ -87,5 +87,5 @@
 		errPrint("Error: %s", err.Error())
 		os.Exit(1)
 	}
-	return p.PrintObj(sl, nil, "")
+	return p.printObj(sl)
 }
--- a/cmd/utils.go	Tue May 09 20:14:28 2017 +0200
+++ b/cmd/utils.go	Tue May 09 20:14:28 2017 +0200
@@ -47,8 +47,19 @@
 	return of
 }
 
+type mcPrinter struct {
+	printer.ResourcePrinter
+	command string
+}
+
+type mcResourcePrinter interface {
+	printer.ResourcePrinter
+	printObj(interface{}) error
+	setCommand(string)
+}
+
 // getPrinter returns a resource printer for the requested output format.
-func getPrinter() (printer.ResourcePrinter, error) {
+func getPrinter() (mcResourcePrinter, error) {
 	opt := make(printer.Options)
 	of := getOutputFormat()
 
@@ -75,7 +86,13 @@
 			opt["template"] = string(tmpl)
 		}
 	}
-	return printer.NewPrinter(of, opt)
+	var mcrp mcPrinter
+	p, err := printer.NewPrinter(of, opt)
+	if err != nil {
+		return mcrp, err
+	}
+	mcrp.ResourcePrinter = p
+	return mcrp, nil
 }
 
 func readTemplate(name, templateDir string) ([]byte, error) {
@@ -123,3 +140,11 @@
 func errPrint(format string, a ...interface{}) (n int, err error) {
 	return fmt.Fprintf(os.Stderr, format+"\n", a...)
 }
+
+func (mcp mcPrinter) printObj(obj interface{}) error {
+	return mcp.PrintObj(obj, nil, "")
+}
+
+func (mcp mcPrinter) setCommand(cmd string) {
+	mcp.command = cmd
+}
--- a/printer/printer.go	Tue May 09 20:14:28 2017 +0200
+++ b/printer/printer.go	Tue May 09 20:14:28 2017 +0200
@@ -13,6 +13,10 @@
 // Options contains options used when creating a ResourcePrinter
 type Options map[string]string
 
+type commonPrinter struct {
+	w io.Writer
+}
+
 // ResourcePrinter is an interface used to print objects.
 type ResourcePrinter interface {
 	// PrintObj receives a runtime object, formats it and prints it to a writer.