From da2255557fa395eeabeff9a4f2949582f8811980 Mon Sep 17 00:00:00 2001 From: Andinus Date: Mon, 6 Apr 2020 22:11:15 +0530 Subject: Initial grus version --- cmd/grus/grus.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 cmd/grus/grus.go (limited to 'cmd/grus/grus.go') diff --git a/cmd/grus/grus.go b/cmd/grus/grus.go new file mode 100644 index 0000000..a68db97 --- /dev/null +++ b/cmd/grus/grus.go @@ -0,0 +1,58 @@ +package main + +import ( + "database/sql" + "fmt" + "log" + "os" + + "tildegit.org/andinus/grus/lexical" + "tildegit.org/andinus/grus/search" + "tildegit.org/andinus/grus/storage" +) + +func grus() { + version := "v0.1.0" + + // Early Check: If command was not passed then print usage and + // exit. Later command & service both are checked, this check + // is for version command. If not checked then running grus + // without any args will fail because os.Args[1] will panic + // the program & produce runtime error. + if len(os.Args) == 1 || len(os.Args[1]) == 0 { + printUsage() + os.Exit(0) + } + + // Running just `grus` would've paniced the program here if + // length of os.Args was not checked beforehand because there + // would be no os.Args[1]. + switch os.Args[1] { + case "version", "v", "-version", "--version", "-v": + fmt.Printf("Grus %s\n", version) + os.Exit(0) + case "help", "-help", "--help", "-h": + printUsage() + os.Exit(0) + case "init", "i": + db := storage.Init() + db.Conn.Close() + os.Exit(0) + } + + // Initialize the database connection. + db := storage.InitConn() + defer db.Conn.Close() + + word := os.Args[1] + sorted := lexical.Sort(word) + + out, err := search.Word(sorted, db) + if err == sql.ErrNoRows { + fmt.Println("Word not found in database.") + return + } else if err != nil { + log.Fatalf("grus: Search failed :: %s", err) + } + fmt.Println(out) +} -- cgit 1.4.1-2-gfad0