From 6876ea1e5cc3319b0d23d829a14f83b9a55663d2 Mon Sep 17 00:00:00 2001
From: Flu0r1ne <flur01ne@flu0r1ne.net>
Date: Sun, 5 Sep 2021 13:52:39 -0500
Subject: Add flag for JSON eval output

---
 cmd/planr/sub/evaluate.go | 52 +++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 44 insertions(+), 8 deletions(-)

(limited to 'cmd/planr/sub')

diff --git a/cmd/planr/sub/evaluate.go b/cmd/planr/sub/evaluate.go
index 81c9989..95f88d0 100644
--- a/cmd/planr/sub/evaluate.go
+++ b/cmd/planr/sub/evaluate.go
@@ -1,21 +1,57 @@
 package sub
 
 import (
-  "golang.flu0r1ne.net/planr"
+	"encoding/json"
+	"fmt"
+	"log"
+        "flag"
+
+	"golang.flu0r1ne.net/planr"
 )
 
+type gradingResults struct {
+  TestResults []planr.TestResult
+  Score       planr.Scoring
+}
+
+func prettyPrint(results gradingResults) {
+  for _, tr := range results.TestResults {
+    tcPprint(tr)
+  }
+
+  printScoring(results.Score)
+}
+
+func jsonPrint(results gradingResults) {
+  res, err := json.Marshal(results)
+
+  if err != nil {
+    log.Fatalf("Error printing JSON: %v\n", err)
+  }
+
+  fmt.Println(string(res))
+}
 
 func Evaluate(runner planr.Runner, params []string, cfg planr.Config) {
+  f := flag.NewFlagSet("evaluate", flag.ExitOnError)
+
+  jsonOutput := f.Bool("json", false, "print json output")
+
+  f.Parse(params)
+
   dieIncompatibleVersion(cfg)
 
   tcs := runner.CollectCases()
   trs := runner.Evaluate(tcs)
-
-  score := planr.Score(trs)
-
-  for _, tr := range trs {
-    tcPprint(tr)
+  
+  results := gradingResults {
+    TestResults: trs,
+    Score:       planr.Score(trs),
+  }
+  
+  if *jsonOutput {
+    jsonPrint(results)
+  } else {
+    prettyPrint(results)
   }
-
-  printScoring(score)
 }
-- 
cgit v1.2.3