about summary refs log tree commit diff
path: root/src/seed.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/seed.go')
-rw-r--r--src/seed.go27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/seed.go b/src/seed.go
index 5dc849c..3dce55f 100644
--- a/src/seed.go
+++ b/src/seed.go
@@ -2,6 +2,8 @@ package main
 
 import (
 	"flag"
+	"fmt"
+	"github.com/pkg/errors"
 	"io/ioutil"
 	"log"
 	"encoding/json"
@@ -17,21 +19,21 @@ func registerSeedFlags() {
 }
 
 // Read a given seed file and return their containing challenges
-func readSeedFile(path string) ([]Challenge) {
+func readSeedFile(path string) ([]Challenge, error) {
 	var jsonContents map[string]interface{}
 
 	// Read file
 	rawContents, readError := ioutil.ReadFile(path)
 	if readError != nil {
 		log.Printf("Failed to read seed file at %s: %s", *seedFilePath, readError.Error())
-		return nil
+		return nil, readError
 	}
 
 	// Convert JSON String to map
 	unmarshalError := json.Unmarshal(rawContents, &jsonContents)
 	if unmarshalError != nil {
 		log.Printf("Failed to parse JSON in seed file at %s: %s", *seedFilePath, unmarshalError.Error())
-		return nil
+		return nil, unmarshalError
 	}
 
 	tmpChallenges := []Challenge{}
@@ -62,16 +64,29 @@ func readSeedFile(path string) ([]Challenge) {
 		}
 	}
 
-	return tmpChallenges
+	return tmpChallenges, nil
 }
 
 // Read the file we set up using flags and store the returned challenge array
-func getChallengesFromSeedFile() {
-	tmpChallenges := readSeedFile(*seedFilePath)
+func getChallengesFromSeedFile() (error) {
+	tmpChallenges, error := readSeedFile(*seedFilePath)
+
+	if error != nil {
+		// Couldn't read file, return error
+		return error
+	}
+
+	if tmpChallenges == nil {
+		// Could read file, but it didn't contain any parseable challenges - return
+		return errors.New(fmt.Sprintf("Empty seed file at %s? No challenges found", *seedFilePath))
+	}
 
 	if tmpChallenges != nil {
+		// returned challenges found! Set them.
 		challenges = tmpChallenges
 	}
+
+	return nil
 }
 
 // Generate a JSON string from the stored challenges, stripped from content which might spoil the user