diff options
Diffstat (limited to 'human.go')
| -rw-r--r-- | human.go | 83 |
1 files changed, 83 insertions, 0 deletions
@@ -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("") +} |
