diff --git a/cmd/gotoml-test-decoder/main.go b/cmd/gotoml-test-decoder/main.go new file mode 100644 index 0000000..db05db3 --- /dev/null +++ b/cmd/gotoml-test-decoder/main.go @@ -0,0 +1,30 @@ +package main + +import ( + "flag" + "log" + "os" + "path" + + "github.com/pelletier/go-toml/v2/testsuite" +) + +func main() { + log.SetFlags(0) + flag.Usage = usage + flag.Parse() + if flag.NArg() != 0 { + flag.Usage() + } + + err := testsuite.DecodeStdin() + if err != nil { + log.Fatal(err) + } +} + +func usage() { + log.Printf("Usage: %s < toml-file\n", path.Base(os.Args[0])) + flag.PrintDefaults() + os.Exit(1) +} diff --git a/testsuite/testsuite.go b/testsuite/testsuite.go index 56c3a03..8aa2814 100644 --- a/testsuite/testsuite.go +++ b/testsuite/testsuite.go @@ -4,7 +4,7 @@ package testsuite import ( "encoding/json" - "log" + "fmt" "os" "github.com/pelletier/go-toml/v2" @@ -33,16 +33,18 @@ func ValueToTaggedJSON(doc interface{}) ([]byte, error) { // DecodeStdin is a helper function for the toml-test binary interface. TOML input // is read from STDIN and a resulting tagged JSON representation is written to // STDOUT. -func DecodeStdin() { +func DecodeStdin() error { var decoded map[string]interface{} if err := toml.NewDecoder(os.Stdin).Decode(&decoded); err != nil { - log.Fatalf("Error decoding TOML: %s", err) + return fmt.Errorf("Error decoding TOML: %s", err) } j := json.NewEncoder(os.Stdout) j.SetIndent("", " ") if err := j.Encode(addTag("", decoded)); err != nil { - log.Fatalf("Error encoding JSON: %s", err) + fmt.Errorf("Error encoding JSON: %s", err) } + + return nil }