2025-01-09 15:03:05 -06:00
|
|
|
syntax = "proto3";
|
|
|
|
|
|
|
|
// Look at "example/fruit.proto" not this file
|
|
|
|
|
|
|
|
// this file is actually used by autogenpb
|
|
|
|
|
|
|
|
// here are some docs, but probably it's just easier to run
|
|
|
|
// autogenpb on this file and see what gets autogenerated
|
|
|
|
// in this directory. All autogenerated files are named *.pb.go
|
|
|
|
|
|
|
|
// the 'uuid' standard at the end is an experiment
|
|
|
|
// establish a way to identify arbitrary .pb files
|
|
|
|
|
|
|
|
// You can generate Marshal & Unmarshal for any struct (message) you want
|
|
|
|
// You can generate SortBy and Append functions ONLY FOR 'repeated <message>'
|
|
|
|
// Also, those structs must be defined in the same file
|
|
|
|
// Additionally, you must use `autogenpb:mutex` on the parent struct.
|
|
|
|
// The autogenerated code requires a RW mutex and autogenpb will insert it into the struct
|
|
|
|
|
|
|
|
package main;
|
|
|
|
|
|
|
|
//
|
|
|
|
// below are the actual structs autogen uses
|
|
|
|
// autogen parses the .proto file and then store the information
|
|
|
|
// it needs in these protobuf files, then it processes the
|
|
|
|
// protobuf files to write out *.sort.pb.go and *.marshal.pb.go files
|
|
|
|
//
|
|
|
|
message MsgName {
|
|
|
|
string name = 1; // the name of the message aka struct. for this example: "Shelf"
|
|
|
|
string lockname = 2; // name of the lockfile. ends in Mu
|
|
|
|
bool doMarshal = 3; // if msg struct should have Marshal & Unmarshal functions
|
|
|
|
bool doMutex = 4; // true if a mutex is needed for the message struct
|
|
|
|
bool doProtocMutex = 5; // an experiment to insert a mutex into the protoc generated msg struct (bad idea?)
|
|
|
|
bool mutexFound = 6; // true if the mutex was added to the protoc pb.go file
|
|
|
|
repeated string sort = 7; // keys to sort on
|
|
|
|
repeated string unique = 8; // if the fields should have AppendUnique() functions
|
|
|
|
}
|
|
|
|
|
2025-01-09 20:23:52 -06:00
|
|
|
message File {
|
2025-01-09 15:03:05 -06:00
|
|
|
string Package = 1; // whatever the package name is at the top of the .go file
|
|
|
|
string filename = 2; // yellow.proto
|
|
|
|
string pbfilename = 3; // yellow.pb.go
|
|
|
|
string filebase = 4; // yellow
|
|
|
|
string uuid = 5; // the uuid to use in a func NewMsgName()
|
|
|
|
string version = 6; // the version to use in a func NewMsgName()
|
|
|
|
MsgName bases = 7; // the message in "plural" form
|
|
|
|
MsgName base = 8; // the primary repeated message for the master struct
|
|
|
|
|
|
|
|
// every struct in this proto file, this file has: "Apple", "Apples", ... "File", etc...
|
2025-01-09 20:23:52 -06:00
|
|
|
repeated MsgName msgNames = 9;
|
2025-01-09 15:03:05 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
// I know, I know, the whole point of using protobuf
|
|
|
|
// is so you don't need a uuid or versions because it's
|
|
|
|
// inherently forward compatable. nonetheless, a simple stubbed out
|
|
|
|
// trivial and empty protobuf message can marshal and identify all the files
|
|
|
|
// also, this could be used to modify /usr/bin/file /usr/share/magic to identify the files
|
|
|
|
// maybe this is already been done and is pointless, but it seems like a good idea
|
|
|
|
message Files { // `autogenpb:marshal`
|
|
|
|
string uuid = 1; // `autogenpb:uuid:6c9ae4dd-648d-4b51-9738-bd59fb8fafd5`
|
|
|
|
string version = 2; // `autogenpb:version:v0.0.38`
|
|
|
|
repeated File Files = 3; // an array of each .proto file in the working directory
|
|
|
|
}
|
|
|
|
|
|
|
|
// this generic message is used by autogen to identify and
|
|
|
|
// then dump the uuid and version from any arbitrary .pb file
|
|
|
|
message Identify { // `autogenpb:marshal`
|
|
|
|
string uuid = 1; //
|
|
|
|
int64 version = 2; //
|
|
|
|
}
|