cleanups and help files
This commit is contained in:
parent
10f75f87a6
commit
d38f5dda75
2
Makefile
2
Makefile
|
@ -6,7 +6,7 @@ simple: test
|
||||||
# make -C example clean simpleMutexProtoc goimports vet
|
# make -C example clean simpleMutexProtoc goimports vet
|
||||||
# make -C example deleteproto
|
# make -C example deleteproto
|
||||||
|
|
||||||
full: install clean auto goimports vet build test install
|
full: clean auto goimports vet build test install
|
||||||
@echo everything worked and the example ran
|
@echo everything worked and the example ran
|
||||||
|
|
||||||
# does a help example to debug the help logic
|
# does a help example to debug the help logic
|
||||||
|
|
|
@ -8,6 +8,9 @@ all: clean simpleMutexProtoc goimports build
|
||||||
# and it is OK to 'go install' the binary
|
# and it is OK to 'go install' the binary
|
||||||
test: testGlobal testProtoc
|
test: testGlobal testProtoc
|
||||||
|
|
||||||
|
toy:
|
||||||
|
../autogenpb --proto toy.proto --package main
|
||||||
|
|
||||||
testGlobal:
|
testGlobal:
|
||||||
make clean
|
make clean
|
||||||
../autogenpb --proto fruit.proto --package main --mutex=false # first build with a global mutex
|
../autogenpb --proto fruit.proto --package main --mutex=false # first build with a global mutex
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
|
||||||
|
package main;
|
||||||
|
|
||||||
|
import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp
|
||||||
|
|
||||||
|
message Basket { // `autogenpb:nomutex`
|
||||||
|
repeated string name = 1; // `autogenpb:sort` `autogenpb:unique`
|
||||||
|
string favorite = 2; // `autogenpb:sort` `autogenpb:unique`
|
||||||
|
int64 price = 3; // `autogenpb:sort`
|
||||||
|
repeated Banana banna = 4;
|
||||||
|
repeated Pear pears = 5;
|
||||||
|
repeated Apple stacks = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
// "Fruit" must exist. you can put anything in it
|
||||||
|
message Toy {
|
||||||
|
string brand = 1; // `autogenpb:unique` `autogenpb:sort`
|
||||||
|
repeated Apple apples = 2;
|
||||||
|
string name = 4; // `autogenpb:sort` `autogenpb:unique`
|
||||||
|
string UPC = 4; // `autogenpb:sort` `autogenpb:unique`
|
||||||
|
string city = 5; // `autogenpb:sort`
|
||||||
|
repeated Basket Baskets = 8;
|
||||||
|
map<string, string> who = 9;
|
||||||
|
int64 cost = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Toys { // `autogenpb:marshal` `autogenpb:mutex`
|
||||||
|
string uuid = 1; // `autogenpb:uuid:be456ad9-f07f-484c-adf2-d96eeabf3079`
|
||||||
|
string version = 2; // `autogenpb:version:v0.0.1`
|
||||||
|
repeated Toy Toys = 3; // THIS MUST BE "Fruit" and then "Fruit" + "s"
|
||||||
|
// you can add additional things here but the three lines above must conform to the standard above
|
||||||
|
}
|
|
@ -68,6 +68,7 @@ func (pb *Files) makeNewSortfile(pf *File) error {
|
||||||
|
|
||||||
funcdef := msg.newIterAll(wSort, FRUIT, APPLE, APPLES, LOCK)
|
funcdef := msg.newIterAll(wSort, FRUIT, APPLE, APPLES, LOCK)
|
||||||
log.Printf("JUNK: %-2d %20s %20s %20s %20s %s\n", i, FRUIT, APPLE, "", LOCK, funcdef)
|
log.Printf("JUNK: %-2d %20s %20s %20s %20s %s\n", i, FRUIT, APPLE, "", LOCK, funcdef)
|
||||||
|
log.Printf("JUNK: %-2d %20s %20s %20s %20s %s\n", i, FRUIT, APPLE, "", LOCK, funcdef)
|
||||||
}
|
}
|
||||||
log.Printf("\n")
|
log.Printf("\n")
|
||||||
|
|
||||||
|
|
83
human.go
83
human.go
|
@ -2,8 +2,13 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
|
||||||
|
"github.com/go-cmd/cmd"
|
||||||
|
"github.com/google/uuid"
|
||||||
"go.wit.com/log"
|
"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
|
// 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)
|
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("")
|
||||||
|
}
|
||||||
|
|
5
main.go
5
main.go
|
@ -145,10 +145,15 @@ func main() {
|
||||||
// try to make foo.pb.go with protoc if it's not here
|
// try to make foo.pb.go with protoc if it's not here
|
||||||
// this is helpful because the protoc-gen-go lines
|
// this is helpful because the protoc-gen-go lines
|
||||||
// are also annoying to code by hand
|
// are also annoying to code by hand
|
||||||
|
checkCmd("protoc")
|
||||||
|
checkCmd("protoc-gen-go")
|
||||||
|
|
||||||
pf.Pbfilename = pf.Filebase + ".pb.go"
|
pf.Pbfilename = pf.Filebase + ".pb.go"
|
||||||
// try to create the foo.pb.go file using protoc if it is not there
|
// try to create the foo.pb.go file using protoc if it is not there
|
||||||
if !shell.Exists(pf.Pbfilename) {
|
if !shell.Exists(pf.Pbfilename) {
|
||||||
|
checkCmd("protoc")
|
||||||
|
checkCmd("protoc-gen-go")
|
||||||
|
|
||||||
if err := pb.protocBuild(pf); err != nil {
|
if err := pb.protocBuild(pf); err != nil {
|
||||||
badExit(err)
|
badExit(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,8 +11,6 @@ import (
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
"golang.org/x/text/cases"
|
"golang.org/x/text/cases"
|
||||||
"golang.org/x/text/language"
|
"golang.org/x/text/language"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// this parses the .proto file and handles anything with `autogenpb: `
|
// this parses the .proto file and handles anything with `autogenpb: `
|
||||||
|
@ -65,52 +63,6 @@ func (pb *Files) hasPluralMessage(f *File) error {
|
||||||
return fmt.Errorf("proto file error %s", f.Filename)
|
return fmt.Errorf("proto file error %s", f.Filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
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 (pb *Files) protoParse(pf *File) error {
|
func (pb *Files) protoParse(pf *File) error {
|
||||||
// does the file conform to the standard? (also reads in UUID & Version)
|
// does the file conform to the standard? (also reads in UUID & Version)
|
||||||
if err := pb.hasPluralMessage(pf); err != nil {
|
if err := pb.hasPluralMessage(pf); err != nil {
|
||||||
|
|
19
protoc.go
19
protoc.go
|
@ -4,12 +4,10 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/go-cmd/cmd"
|
|
||||||
"go.wit.com/lib/gui/shell"
|
"go.wit.com/lib/gui/shell"
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
)
|
)
|
||||||
|
@ -106,20 +104,3 @@ func runprotoc(pwd string, mycmd []string) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
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("")
|
|
||||||
return fmt.Errorf("protoc failed with %d %v", result.Exit, result.Error)
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue