Add JSON render + small refactoring (Closes #25)
This commit is contained in:
		@@ -4,9 +4,11 @@ func (export *Export) Export() (render string) {
 | 
			
		||||
	// Print the valid solutions
 | 
			
		||||
	switch export.Controller.Output {
 | 
			
		||||
	case "human":
 | 
			
		||||
		render = export.RenderHumanReadableSolutions()
 | 
			
		||||
		render = export.renderHumanReadable()
 | 
			
		||||
	case "flat":
 | 
			
		||||
		render = export.renderFlatSolutions()
 | 
			
		||||
		render = export.renderFlat()
 | 
			
		||||
	case "json":
 | 
			
		||||
		render = export.renderJSON()
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,8 +5,8 @@ import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Print solutions into a human friendly format for in the console.
 | 
			
		||||
func (export *Export) renderFlatSolutions() (render string) {
 | 
			
		||||
// Render output as stored internally.
 | 
			
		||||
func (export *Export) renderFlat() (render string) {
 | 
			
		||||
	for solutionIndex, solution := range export.Controller.Solutions {
 | 
			
		||||
		render += fmt.Sprintln("\nSolution #" + strconv.Itoa(solutionIndex+1) + ":")
 | 
			
		||||
		render += fmt.Sprintln(solution)
 | 
			
		||||
@@ -5,8 +5,8 @@ import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Print solutions into a human friendly format for in the console.
 | 
			
		||||
func (export *Export) RenderHumanReadableSolutions() (render string) {
 | 
			
		||||
// Render solutions in a human friendly format.
 | 
			
		||||
func (export *Export) renderHumanReadable() (render string) {
 | 
			
		||||
	for solutionIndex, solution := range export.Controller.Solutions {
 | 
			
		||||
		render += fmt.Sprintln("\nSolution #" + strconv.Itoa(solutionIndex+1) + ":")
 | 
			
		||||
		render += fmt.Sprintln("╔═══════════╗")
 | 
			
		||||
							
								
								
									
										36
									
								
								export/renderJSON.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								export/renderJSON.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
package export
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"log"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Render JSON output.
 | 
			
		||||
func (export *Export) renderJSON() (render string) {
 | 
			
		||||
	type solution_type map[string]any
 | 
			
		||||
	solutions := make([]solution_type, 0)
 | 
			
		||||
 | 
			
		||||
	for solutionIndex, solution := range export.Controller.Solutions {
 | 
			
		||||
		solutionMap := map[string]any{
 | 
			
		||||
			"order": solutionIndex,
 | 
			
		||||
			"row1":  solution[0],
 | 
			
		||||
			"row2":  solution[1],
 | 
			
		||||
			"row3":  solution[2],
 | 
			
		||||
			"row4":  solution[3],
 | 
			
		||||
			"row5":  solution[4],
 | 
			
		||||
			"row6":  solution[5],
 | 
			
		||||
			"row7":  solution[6],
 | 
			
		||||
			"row8":  solution[7],
 | 
			
		||||
			"row9":  solution[8],
 | 
			
		||||
		}
 | 
			
		||||
		solutions = append(solutions, solutionMap)
 | 
			
		||||
	}
 | 
			
		||||
	renderBytes, err := json.Marshal(solutions)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Println("ERROR: json.Marshal error:", err)
 | 
			
		||||
		log.Println("Printing solution as-is:", solutions)
 | 
			
		||||
		return ""
 | 
			
		||||
	}
 | 
			
		||||
	render = string(renderBytes)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
@@ -24,7 +24,7 @@ func (flags *Flags) ParseFlags() {
 | 
			
		||||
	flag.IntVar(&flags.Controller.NumCPUs, "numcpu", runtime.NumCPU(), "Number of CPU cores to assign to this task.")
 | 
			
		||||
	flag.IntVar(&flags.Controller.Split, "split", 1, "Split the tasks in n parts. This depends on the availability of the first row.")
 | 
			
		||||
	flag.IntVar(&flags.Controller.Part, "part", 1, "Process part x in n parts. Cannot be lower than 1, or higher than specified in split.")
 | 
			
		||||
	flag.StringVar(&flags.Controller.Output, "output", "human", "Type of output. 'human' for human readable. 'flat' for flat as stored in memory output.")
 | 
			
		||||
	flag.StringVar(&flags.Controller.Output, "output", "human", "Type of output. 'human' for human readable. 'flat' for flat as stored in memory output. 'json' for JSON output.")
 | 
			
		||||
 | 
			
		||||
	// Parse the flags
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
@@ -75,7 +75,7 @@ func (flags *Flags) ParseFlags() {
 | 
			
		||||
 | 
			
		||||
	// Process output selection
 | 
			
		||||
	flags.Controller.Output = strings.ToLower(flags.Controller.Output)
 | 
			
		||||
	if flags.Controller.Output != "human" && flags.Controller.Output != "flat" {
 | 
			
		||||
	if flags.Controller.Output != "human" && flags.Controller.Output != "flat" && flags.Controller.Output != "json" {
 | 
			
		||||
		log.Printf("ERROR: Invalid output, can only be 'human' or 'flat'.\n")
 | 
			
		||||
		flags.printUsage()
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user