summaryrefslogtreecommitdiff
path: root/human.go
diff options
context:
space:
mode:
Diffstat (limited to 'human.go')
-rw-r--r--human.go83
1 files changed, 83 insertions, 0 deletions
diff --git a/human.go b/human.go
index bd27580..6c96bd1 100644
--- a/human.go
+++ b/human.go
@@ -2,8 +2,13 @@ package main
import (
"fmt"
+ "os/exec"
+ "github.com/go-cmd/cmd"
+ "github.com/google/uuid"
"go.wit.com/log"
+ "golang.org/x/text/cases"
+ "golang.org/x/text/language"
)
// This was just going to be a function to print the results to stdout
@@ -122,3 +127,81 @@ func (msg *MsgName) printMsg() {
log.Printf("\t%s %s %s\n", v.VarName, v.VarType, end)
}
}
+
+func checkCmd(cmd string) {
+ path, err := exec.LookPath(cmd)
+ if err != nil {
+ fmt.Printf("\n%s is not in the PATH\n", cmd)
+ userInstructions()
+ log.Sleep(2)
+ } else {
+ fmt.Printf("%s is available at %s\n", cmd, path)
+ }
+}
+
+func (pf *File) noPluralMessage() {
+ base := cases.Title(language.English, cases.NoLower).String(pf.Filebase)
+
+ log.Info("")
+ log.Info("###########################################################################")
+ log.Info("Your proto file", pf.Filename, "does not contain the correct 'message' definitions")
+ log.Info("")
+ log.Info("For autogenpb to work on your file", pf.Filename, ", you must have both names exactly:")
+ log.Info("")
+ log.Printf("message %s {\n", base)
+ log.Info("}")
+ log.Printf("message %s {\n", base+"s")
+ log.Info("}")
+ log.Info("")
+ log.Info("###########################################################################")
+ badExit(fmt.Errorf("proto file error %s", pf.Filename))
+}
+
+// message Fruits { // `autogenpb:marshal` `autogenpb:mutex`
+// string uuid = 1; // `autogenpb:uuid:be926ad9-f07f-484c-adf2-d96eeabf3079`
+// string version = 2; // `autogenpb:version:v0.0.1`
+// repeated Fruit Fruits = 3; // THIS MUST BE "Fruit" and then "Fruit" + "s"
+// }
+
+func (pf *File) noUuid() {
+ base := cases.Title(language.English, cases.NoLower).String(pf.Filebase)
+ id := uuid.New()
+
+ log.Info("")
+ log.Info("###########################################################################")
+ log.Info("Your proto file", pf.Filename, "is incorrect for 'message' ", base+"s")
+ log.Info("")
+ log.Info("For autogenpb to work on your file", pf.Filename, ",", base+"s must be exactly:")
+ log.Info("")
+ log.Info("message", base+"s", "{ // `autogenpb:marshal` `autogenpb:mutex`")
+ log.Info(" string uuid = 1; // `autogenpb:uuid:" + id.String() + "`")
+ log.Info(" string version = 2; // `autogenpb:version:v0.0.1`")
+ log.Info(" repeated", base, base+"s", " = 3; // THIS MUST BE ", base, " and then ", base+"s")
+ log.Info("}")
+ log.Info("")
+ log.Info("If you don't have a UUID, you can use the randomly generated one here")
+ log.Info("")
+ log.Info("###########################################################################")
+ badExit(fmt.Errorf("proto file error %s", pf.Filename))
+}
+
+func userNotes(result cmd.Status) error {
+ log.Info("protoc failed", result.Cmd, "with", result.Exit)
+ for _, line := range result.Stdout {
+ log.Info("STDOUT:", line)
+ }
+ for _, line := range result.Stderr {
+ log.Info("STDERR:", line)
+ }
+ userInstructions()
+ return fmt.Errorf("protoc failed with %d %v", result.Exit, result.Error)
+}
+
+func userInstructions() {
+ log.Info("This is likely because you don't have protoc and protoc-gen-go installed")
+ log.Info("")
+ log.Info("On debian, you can:")
+ log.Info(" apt install protobuf-compiler # for protoc")
+ log.Info(" apt install protoc-gen-go # for protoc-gen-go")
+ log.Info("")
+}