diff --git a/parseProtoFile.go b/parseProtoFile.go index b62e5e2..49f382c 100644 --- a/parseProtoFile.go +++ b/parseProtoFile.go @@ -38,18 +38,33 @@ func (pb *Files) findAutogenpb(f *File) error { // log.Info("line:", line) parts := strings.Fields(line) - if strings.Contains(line, "autogenpb:marshal") { - newm := parts[1] - if curmsg != nil { - // log.Info("found marshal", newm) - marshalKeys = append(marshalKeys, newm) + + if strings.Contains(line, "autogenpb:sort") { + if parts[0] == "repeated" { + newm := parts[1] + if curmsg == nil { + log.Info("Error: Found Sort for:", newm, "however, this struct can't be used") + // log.Info("found marshal", newm) + marshalKeys = append(marshalKeys, newm) + } else { + log.Info("Found Sort for:", newm, "in struct", curmsg.Name) + } + } else { + log.Info("Error:", line) + log.Info("Error: can not sort on non repeated fields") } } if strings.Contains(line, "autogenpb:unique") { - newu := parts[1] - newu = cases.Title(language.English, cases.NoLower).String(newu) - // log.Info("found unique field", newu) - uniqueKeys = append(uniqueKeys, newu) + if parts[0] == "repeated" { + // log.Info("Found Unique for:", parts) + newu := parts[1] + newu = cases.Title(language.English, cases.NoLower).String(newu) + log.Info("found unique field", newu, "in struct", curmsg.Name) + // uniqueKeys = append(uniqueKeys, newu) + } else { + log.Info("Error:", line) + log.Info("Error: can not append on non repeated fields") + } } } return nil diff --git a/testfiles/auto.proto b/testfiles/auto.proto index 4095b0d..b2166e8 100644 --- a/testfiles/auto.proto +++ b/testfiles/auto.proto @@ -21,11 +21,11 @@ message Apple { // `autogenpb:marshal` } message Apples { // `autogenpb:marshal` `autogenpb:mutex` - string uuid = 1; // `autogen:default:b2a2de35-07b6-443b-8188-709e27bee8a7` - string version = 2; // `autogen:default:2` - repeated Apple Apples = 3; // `autogen:sort` - repeated Pears More = 4; // `autogen:sort` - repeated string Color = 5; // `autogen:sort` `autogen:unique` + string uuid = 1; // `autogenpb:default:b2a2de35-07b6-443b-8188-709e27bee8a7` + string version = 2; // `autogenpb:default:2` + repeated Apple Apples = 3; // `autogenpb:sort` + repeated Pears More = 4; // `autogenpb:sort` + repeated string Color = 5; // `autogenpb:sort` `autogenpb:unique` } message Pears { @@ -70,13 +70,13 @@ message MsgName { repeated string unique = 5; // if the fields should have AppendUnique() functions } -message File { // `autogen:nomarshal` +message File { // `autogenpb:nomarshal` string name = 1; // for this one: autogen.proto string uuid = 2; // the uuid to use in a func NewMsgName() int64 version = 3; // the version to use in a func NewMsgName() // in this proto file, this would have "Apple", "Apples", ... "File", etc... - repeated MsgName msgNames = 4; // `autogen:unique` // in this file + repeated MsgName msgNames = 4; // `autogenpb:unique` // in this file } // I know, I know, the whole point of using protobuf @@ -85,15 +85,15 @@ message File { // `autogen:nomarshal` // 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 { // `autogen:marshal` - string uuid = 1; // `autogen:uuid:fakeuuid` - int64 version = 2; // `autogen:id:42` +message Files { // `autogenpb:marshal` + string uuid = 1; // `autogenpb:uuid:fakeuuid` + int64 version = 2; // `autogenpb:id:42` 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 { // `autogen:marshal` +message Identify { // `autogenpb:marshal` string uuid = 1; // int64 version = 2; // }