Deduplicate code in scouting/webserver/requests/debug/cli/main.go

Signed-off-by: Philipp Schrader <philipp.schrader@gmail.com>
Change-Id: I3a097fa5ec694438bf048129010f1eab59abeb43
diff --git a/scouting/webserver/requests/debug/cli/main.go b/scouting/webserver/requests/debug/cli/main.go
index 6f2de1d..f6fb38a 100644
--- a/scouting/webserver/requests/debug/cli/main.go
+++ b/scouting/webserver/requests/debug/cli/main.go
@@ -65,6 +65,18 @@
 	return binaryFb
 }
 
+func maybePerformRequest[T interface{}](fbName, fbsPath, requestJsonPath, address string, requester func(string, []byte) (*T, error)) {
+	if requestJsonPath != "" {
+		log.Printf("Sending %s to %s", fbName, address)
+		binaryRequest := parseJson(fbsPath, requestJsonPath)
+		response, err := requester(address, binaryRequest)
+		if err != nil {
+			log.Fatalf("Failed %s: %v", fbName, err)
+		}
+		spew.Dump(*response)
+	}
+}
+
 func main() {
 	// Parse command line arguments.
 	indentPtr := flag.String("indent", " ",
@@ -86,59 +98,38 @@
 	spew.Config.Indent = *indentPtr
 
 	// Handle the actual arguments.
-	if *submitDataScoutingPtr != "" {
-		log.Printf("Sending SubmitDataScouting to %s", *addressPtr)
-		binaryRequest := parseJson(
-			"scouting/webserver/requests/messages/submit_data_scouting.fbs",
-			*submitDataScoutingPtr)
-		response, err := debug.SubmitDataScouting(*addressPtr, binaryRequest)
-		if err != nil {
-			log.Fatal("Failed SubmitDataScouting: ", err)
-		}
-		spew.Dump(*response)
-	}
-	if *requestAllMatchesPtr != "" {
-		log.Printf("Sending RequestAllMatches to %s", *addressPtr)
-		binaryRequest := parseJson(
-			"scouting/webserver/requests/messages/request_all_matches.fbs",
-			*requestAllMatchesPtr)
-		response, err := debug.RequestAllMatches(*addressPtr, binaryRequest)
-		if err != nil {
-			log.Fatal("Failed RequestAllMatches: ", err)
-		}
-		spew.Dump(*response)
-	}
-	if *requestMatchesForTeamPtr != "" {
-		log.Printf("Sending RequestMatchesForTeam to %s", *addressPtr)
-		binaryRequest := parseJson(
-			"scouting/webserver/requests/messages/request_matches_for_team.fbs",
-			*requestMatchesForTeamPtr)
-		response, err := debug.RequestMatchesForTeam(*addressPtr, binaryRequest)
-		if err != nil {
-			log.Fatal("Failed RequestMatchesForTeam: ", err)
-		}
-		spew.Dump(*response)
-	}
-	if *requestDataScoutingPtr != "" {
-		log.Printf("Sending RequestDataScouting to %s", *addressPtr)
-		binaryRequest := parseJson(
-			"scouting/webserver/requests/messages/request_data_scouting.fbs",
-			*requestDataScoutingPtr)
-		response, err := debug.RequestDataScouting(*addressPtr, binaryRequest)
-		if err != nil {
-			log.Fatal("Failed RequestDataScouting: ", err)
-		}
-		spew.Dump(*response)
-	}
-	if *refreshMatchListPtr != "" {
-		log.Printf("Sending RefreshMatchList to %s", *addressPtr)
-		binaryRequest := parseJson(
-			"scouting/webserver/requests/messages/refresh_match_list.fbs",
-			*refreshMatchListPtr)
-		response, err := debug.RefreshMatchList(*addressPtr, binaryRequest)
-		if err != nil {
-			log.Fatal("Failed RefreshMatchList: ", err)
-		}
-		spew.Dump(*response)
-	}
+	maybePerformRequest(
+		"SubmitDataScouting",
+		"scouting/webserver/requests/messages/submit_data_scouting.fbs",
+		*submitDataScoutingPtr,
+		*addressPtr,
+		debug.SubmitDataScouting)
+
+	maybePerformRequest(
+		"RequestAllMatches",
+		"scouting/webserver/requests/messages/request_all_matches.fbs",
+		*requestAllMatchesPtr,
+		*addressPtr,
+		debug.RequestAllMatches)
+
+	maybePerformRequest(
+		"RequestMatchesForTeam",
+		"scouting/webserver/requests/messages/request_matches_for_team.fbs",
+		*requestMatchesForTeamPtr,
+		*addressPtr,
+		debug.RequestMatchesForTeam)
+
+	maybePerformRequest(
+		"RequestDataScouting",
+		"scouting/webserver/requests/messages/request_data_scouting.fbs",
+		*requestDataScoutingPtr,
+		*addressPtr,
+		debug.RequestDataScouting)
+
+	maybePerformRequest(
+		"RefreshMatchList",
+		"scouting/webserver/requests/messages/refresh_match_list.fbs",
+		*refreshMatchListPtr,
+		*addressPtr,
+		debug.RefreshMatchList)
 }