summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-01-13 08:20:51 -0600
committerJeff Carr <[email protected]>2025-01-13 08:20:51 -0600
commit3b61fef227b3c88495e7f2c4367b5df62a761502 (patch)
treefe6e4a247b2d3b42c8b586b7ce0d30c671acf338
parent81d6cd6b74fa4b4c94ec13bf02c5b9ac768d36d6 (diff)
mutex testingv0.0.43
-rw-r--r--file.marshal.pb.go91
-rw-r--r--file.pb.go835
-rw-r--r--file.sort.pb.go412
-rw-r--r--go.mod17
-rw-r--r--go.sum30
5 files changed, 1385 insertions, 0 deletions
diff --git a/file.marshal.pb.go b/file.marshal.pb.go
new file mode 100644
index 0000000..fd6d505
--- /dev/null
+++ b/file.marshal.pb.go
@@ -0,0 +1,91 @@
+// Code generated by go.wit.com/apps/autogenpb DO NOT EDIT.
+// This file was autogenerated with autogenpb v0.0.42-1-gf74f364 2025.01.13_0345
+// go install go.wit.com/apps/autogenpb@latest
+//
+// define which structs (messages) you want to use in the .proto file
+// Then sort.pb.go and marshal.pb.go files are autogenerated
+//
+// autogenpb uses it and has an example .proto file with instructions
+//
+
+package main
+
+import (
+ "google.golang.org/protobuf/encoding/protojson"
+ "google.golang.org/protobuf/encoding/prototext"
+ "google.golang.org/protobuf/proto"
+)
+
+// human readable JSON
+func (v *Files) FormatJSON() string {
+ return protojson.Format(v)
+}
+
+// marshal json
+func (v *Files) MarshalJSON() ([]byte, error) {
+ return protojson.Marshal(v)
+}
+
+// unmarshal json
+func (v *Files) UnmarshalJSON(data []byte) error {
+ return protojson.Unmarshal(data, v)
+}
+
+// apparently this isn't stable, but it's awesomely better
+// https://protobuf.dev/reference/go/faq/#unstable-text
+// it's brilliant for config files!
+func (v *Files) FormatTEXT() string {
+ return prototext.Format(v)
+}
+
+// unmarshalTEXT. This reads the .text config file back in after the user edits it
+func (v *Files) UnmarshalTEXT(data []byte) error {
+ return prototext.Unmarshal(data, v)
+}
+
+// marshal to wire. This is called winning.
+func (v *Files) Marshal() ([]byte, error) {
+ return proto.Marshal(v)
+}
+
+// unmarshal from wire. You have won.
+func (v *Files) Unmarshal(data []byte) error {
+ return proto.Unmarshal(data, v)
+}
+
+// human readable JSON
+func (v *Identify) FormatJSON() string {
+ return protojson.Format(v)
+}
+
+// marshal json
+func (v *Identify) MarshalJSON() ([]byte, error) {
+ return protojson.Marshal(v)
+}
+
+// unmarshal json
+func (v *Identify) UnmarshalJSON(data []byte) error {
+ return protojson.Unmarshal(data, v)
+}
+
+// apparently this isn't stable, but it's awesomely better
+// https://protobuf.dev/reference/go/faq/#unstable-text
+// it's brilliant for config files!
+func (v *Identify) FormatTEXT() string {
+ return prototext.Format(v)
+}
+
+// unmarshalTEXT. This reads the .text config file back in after the user edits it
+func (v *Identify) UnmarshalTEXT(data []byte) error {
+ return prototext.Unmarshal(data, v)
+}
+
+// marshal to wire. This is called winning.
+func (v *Identify) Marshal() ([]byte, error) {
+ return proto.Marshal(v)
+}
+
+// unmarshal from wire. You have won.
+func (v *Identify) Unmarshal(data []byte) error {
+ return proto.Unmarshal(data, v)
+}
diff --git a/file.pb.go b/file.pb.go
new file mode 100644
index 0000000..9d7713e
--- /dev/null
+++ b/file.pb.go
@@ -0,0 +1,835 @@
+// Code modified by go.wit.com/apps/autogenpb DO NOT EDIT.
+//
+// user defined Mutex locks were auto added
+//
+// autogenpb version & build time: v0.0.42-1-gf74f364 2025.01.13_0345
+// autogenpb auto generates Sort(), Unique() and Marshal() functions
+// go install go.wit.com/apps/autogenpb@latest
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.35.2-devel
+// protoc v3.21.12
+// source: file.proto
+
+// 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
+
+import (
+ reflect "reflect"
+ sync "sync"
+
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// 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
+type MsgVar struct {
+ Lock sync.RWMutex // auto-added by go.wit.com/apps/autogenpb
+
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ VarName string `protobuf:"bytes,1,opt,name=varName,proto3" json:"varName,omitempty"` // the variable name
+ VarType string `protobuf:"bytes,2,opt,name=varType,proto3" json:"varType,omitempty"` // the variable type
+ IsRepeated bool `protobuf:"varint,3,opt,name=isRepeated,proto3" json:"isRepeated,omitempty"` // does the variable repeate
+ HasSort bool `protobuf:"varint,4,opt,name=hasSort,proto3" json:"hasSort,omitempty"` // marked with sort
+ HasUnique bool `protobuf:"varint,5,opt,name=hasUnique,proto3" json:"hasUnique,omitempty"` // marked with unique
+}
+
+func (x *MsgVar) Reset() {
+ *x = MsgVar{}
+ mi := &file_file_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *MsgVar) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MsgVar) ProtoMessage() {}
+
+func (x *MsgVar) ProtoReflect() protoreflect.Message {
+ mi := &file_file_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MsgVar.ProtoReflect.Descriptor instead.
+func (*MsgVar) Descriptor() ([]byte, []int) {
+ return file_file_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *MsgVar) GetVarName() string {
+ if x != nil {
+ return x.VarName
+ }
+ return ""
+}
+
+func (x *MsgVar) GetVarType() string {
+ if x != nil {
+ return x.VarType
+ }
+ return ""
+}
+
+func (x *MsgVar) GetIsRepeated() bool {
+ if x != nil {
+ return x.IsRepeated
+ }
+ return false
+}
+
+func (x *MsgVar) GetHasSort() bool {
+ if x != nil {
+ return x.HasSort
+ }
+ return false
+}
+
+func (x *MsgVar) GetHasUnique() bool {
+ if x != nil {
+ return x.HasUnique
+ }
+ return false
+}
+
+type MsgName struct {
+ Lock sync.RWMutex // auto-added by go.wit.com/apps/autogenpb
+
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // the name of the message aka struct. for this example: "Shelf"
+ Lockname string `protobuf:"bytes,2,opt,name=lockname,proto3" json:"lockname,omitempty"` // name of the lockfile. ends in Mu
+ DoMarshal bool `protobuf:"varint,3,opt,name=doMarshal,proto3" json:"doMarshal,omitempty"` // if msg struct should have Marshal & Unmarshal functions
+ DoMutex bool `protobuf:"varint,4,opt,name=doMutex,proto3" json:"doMutex,omitempty"` // true if a mutex is needed for the message struct
+ DoProtocMutex bool `protobuf:"varint,5,opt,name=doProtocMutex,proto3" json:"doProtocMutex,omitempty"` // an experiment to insert a mutex into the protoc generated msg struct (bad idea?)
+ MutexFound bool `protobuf:"varint,6,opt,name=mutexFound,proto3" json:"mutexFound,omitempty"` // true if the mutex was added to the protoc pb.go file
+ Sort []string `protobuf:"bytes,7,rep,name=sort,proto3" json:"sort,omitempty"` // keys to sort on
+ Unique []string `protobuf:"bytes,8,rep,name=unique,proto3" json:"unique,omitempty"` // if the fields should have AppendUnique() functions
+ Vars []*MsgVar `protobuf:"bytes,9,rep,name=vars,proto3" json:"vars,omitempty"` // store all the vars in the message
+ NeedIter bool `protobuf:"varint,10,opt,name=needIter,proto3" json:"needIter,omitempty"` // true if the sort iterator has not been generated yet
+ NeedAll bool `protobuf:"varint,11,opt,name=needAll,proto3" json:"needAll,omitempty"` // true if the sort iterator has not been generated yet
+ NoMutex bool `protobuf:"varint,12,opt,name=noMutex,proto3" json:"noMutex,omitempty"` // only use the global mutex
+}
+
+func (x *MsgName) Reset() {
+ *x = MsgName{}
+ mi := &file_file_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *MsgName) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MsgName) ProtoMessage() {}
+
+func (x *MsgName) ProtoReflect() protoreflect.Message {
+ mi := &file_file_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MsgName.ProtoReflect.Descriptor instead.
+func (*MsgName) Descriptor() ([]byte, []int) {
+ return file_file_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *MsgName) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *MsgName) GetLockname() string {
+ if x != nil {
+ return x.Lockname
+ }
+ return ""
+}
+
+func (x *MsgName) GetDoMarshal() bool {
+ if x != nil {
+ return x.DoMarshal
+ }
+ return false
+}
+
+func (x *MsgName) GetDoMutex() bool {
+ if x != nil {
+ return x.DoMutex
+ }
+ return false
+}
+
+func (x *MsgName) GetDoProtocMutex() bool {
+ if x != nil {
+ return x.DoProtocMutex
+ }
+ return false
+}
+
+func (x *MsgName) GetMutexFound() bool {
+ if x != nil {
+ return x.MutexFound
+ }
+ return false
+}
+
+func (x *MsgName) GetSort() []string {
+ if x != nil {
+ return x.Sort
+ }
+ return nil
+}
+
+func (x *MsgName) GetUnique() []string {
+ if x != nil {
+ return x.Unique
+ }
+ return nil
+}
+
+func (x *MsgName) GetVars() []*MsgVar {
+ if x != nil {
+ return x.Vars
+ }
+ return nil
+}
+
+func (x *MsgName) GetNeedIter() bool {
+ if x != nil {
+ return x.NeedIter
+ }
+ return false
+}
+
+func (x *MsgName) GetNeedAll() bool {
+ if x != nil {
+ return x.NeedAll
+ }
+ return false
+}
+
+func (x *MsgName) GetNoMutex() bool {
+ if x != nil {
+ return x.NoMutex
+ }
+ return false
+}
+
+type Sort struct {
+ Lock sync.RWMutex // auto-added by go.wit.com/apps/autogenpb
+
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ MsgName string `protobuf:"bytes,1,opt,name=msgName,proto3" json:"msgName,omitempty"` // `autogenpb:unique` File
+ VarType string `protobuf:"bytes,2,opt,name=varType,proto3" json:"varType,omitempty"` // `autogenpb:unique` MsgName
+ VarName string `protobuf:"bytes,3,opt,name=varName,proto3" json:"varName,omitempty"` // `autogenpb:unique` msgNames, sortNames
+ Lockname string `protobuf:"bytes,4,opt,name=lockname,proto3" json:"lockname,omitempty"` //
+ NeedAll bool `protobuf:"varint,5,opt,name=needAll,proto3" json:"needAll,omitempty"` //
+}
+
+func (x *Sort) Reset() {
+ *x = Sort{}
+ mi := &file_file_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Sort) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Sort) ProtoMessage() {}
+
+func (x *Sort) ProtoReflect() protoreflect.Message {
+ mi := &file_file_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Sort.ProtoReflect.Descriptor instead.
+func (*Sort) Descriptor() ([]byte, []int) {
+ return file_file_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *Sort) GetMsgName() string {
+ if x != nil {
+ return x.MsgName
+ }
+ return ""
+}
+
+func (x *Sort) GetVarType() string {
+ if x != nil {
+ return x.VarType
+ }
+ return ""
+}
+
+func (x *Sort) GetVarName() string {
+ if x != nil {
+ return x.VarName
+ }
+ return ""
+}
+
+func (x *Sort) GetLockname() string {
+ if x != nil {
+ return x.Lockname
+ }
+ return ""
+}
+
+func (x *Sort) GetNeedAll() bool {
+ if x != nil {
+ return x.NeedAll
+ }
+ return false
+}
+
+type Find struct {
+ Lock sync.RWMutex // auto-added by go.wit.com/apps/autogenpb
+
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` // `autogenpb:unique` File
+ VarType string `protobuf:"bytes,2,opt,name=varType,proto3" json:"varType,omitempty"` // `autogenpb:unique` MsgName
+ VarName string `protobuf:"bytes,3,opt,name=varName,proto3" json:"varName,omitempty"` // `autogenpb:unique` msgNames, sortNames
+ NeedAll bool `protobuf:"varint,4,opt,name=needAll,proto3" json:"needAll,omitempty"` //
+}
+
+func (x *Find) Reset() {
+ *x = Find{}
+ mi := &file_file_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Find) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Find) ProtoMessage() {}
+
+func (x *Find) ProtoReflect() protoreflect.Message {
+ mi := &file_file_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Find.ProtoReflect.Descriptor instead.
+func (*Find) Descriptor() ([]byte, []int) {
+ return file_file_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *Find) GetParent() string {
+ if x != nil {
+ return x.Parent
+ }
+ return ""
+}
+
+func (x *Find) GetVarType() string {
+ if x != nil {
+ return x.VarType
+ }
+ return ""
+}
+
+func (x *Find) GetVarName() string {
+ if x != nil {
+ return x.VarName
+ }
+ return ""
+}
+
+func (x *Find) GetNeedAll() bool {
+ if x != nil {
+ return x.NeedAll
+ }
+ return false
+}
+
+type File struct {
+ Lock sync.RWMutex // auto-added by go.wit.com/apps/autogenpb
+
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // `autogenpb:var:w io.Writer`
+ Package string `protobuf:"bytes,1,opt,name=Package,proto3" json:"Package,omitempty"` // whatever the package name is at the top of the .go file
+ Filename string `protobuf:"bytes,2,opt,name=filename,proto3" json:"filename,omitempty"` // yellow.proto
+ Pbfilename string `protobuf:"bytes,3,opt,name=pbfilename,proto3" json:"pbfilename,omitempty"` // yellow.pb.go
+ Filebase string `protobuf:"bytes,4,opt,name=filebase,proto3" json:"filebase,omitempty"` // yellow
+ Uuid string `protobuf:"bytes,5,opt,name=uuid,proto3" json:"uuid,omitempty"` // the uuid to use in a func NewMsgName()
+ Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` // the version to use in a func NewMsgName()
+ Bases *MsgName `protobuf:"bytes,7,opt,name=bases,proto3" json:"bases,omitempty"` // the message in "plural" form
+ Base *MsgName `protobuf:"bytes,8,opt,name=base,proto3" json:"base,omitempty"` // the primary repeated message for the master struct
+ // every struct in this proto file, this file has: "Apple", "Apples", ... "File", etc...
+ MsgNames []*MsgName `protobuf:"bytes,9,rep,name=msgNames,proto3" json:"msgNames,omitempty"`
+ SortNames []*MsgName `protobuf:"bytes,10,rep,name=sortNames,proto3" json:"sortNames,omitempty"` // variables that are repeated can have the standard functions generated (Sort(), etc)
+ IterMap map[string]string `protobuf:"bytes,11,rep,name=iterMap,proto3" json:"iterMap,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ ToSort []*Sort `protobuf:"bytes,12,rep,name=toSort,proto3" json:"toSort,omitempty"` // variables that are repeated can have the standard functions generated (Sort(), etc)
+}
+
+func (x *File) Reset() {
+ *x = File{}
+ mi := &file_file_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *File) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*File) ProtoMessage() {}
+
+func (x *File) ProtoReflect() protoreflect.Message {
+ mi := &file_file_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use File.ProtoReflect.Descriptor instead.
+func (*File) Descriptor() ([]byte, []int) {
+ return file_file_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *File) GetPackage() string {
+ if x != nil {
+ return x.Package
+ }
+ return ""
+}
+
+func (x *File) GetFilename() string {
+ if x != nil {
+ return x.Filename
+ }
+ return ""
+}
+
+func (x *File) GetPbfilename() string {
+ if x != nil {
+ return x.Pbfilename
+ }
+ return ""
+}
+
+func (x *File) GetFilebase() string {
+ if x != nil {
+ return x.Filebase
+ }
+ return ""
+}
+
+func (x *File) GetUuid() string {
+ if x != nil {
+ return x.Uuid
+ }
+ return ""
+}
+
+func (x *File) GetVersion() string {
+ if x != nil {
+ return x.Version
+ }
+ return ""
+}
+
+func (x *File) GetBases() *MsgName {
+ if x != nil {
+ return x.Bases
+ }
+ return nil
+}
+
+func (x *File) GetBase() *MsgName {
+ if x != nil {
+ return x.Base
+ }
+ return nil
+}
+
+func (x *File) GetMsgNames() []*MsgName {
+ if x != nil {
+ return x.MsgNames
+ }
+ return nil
+}
+
+func (x *File) GetSortNames() []*MsgName {
+ if x != nil {
+ return x.SortNames
+ }
+ return nil
+}
+
+func (x *File) GetIterMap() map[string]string {
+ if x != nil {
+ return x.IterMap
+ }
+ return nil
+}
+
+func (x *File) GetToSort() []*Sort {
+ if x != nil {
+ return x.ToSort
+ }
+ return nil
+}
+
+// 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
+type Files struct {
+ Lock sync.RWMutex // auto-added by go.wit.com/apps/autogenpb
+
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` // `autogenpb:uuid:6c9ae4dd-648d-4b51-9738-bd59fb8fafd5`
+ Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` // `autogenpb:version:v0.0.38`
+ Files []*File `protobuf:"bytes,3,rep,name=Files,proto3" json:"Files,omitempty"` // an array of each .proto file in the working directory
+}
+
+func (x *Files) Reset() {
+ *x = Files{}
+ mi := &file_file_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Files) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Files) ProtoMessage() {}
+
+func (x *Files) ProtoReflect() protoreflect.Message {
+ mi := &file_file_proto_msgTypes[5]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Files.ProtoReflect.Descriptor instead.
+func (*Files) Descriptor() ([]byte, []int) {
+ return file_file_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *Files) GetUuid() string {
+ if x != nil {
+ return x.Uuid
+ }
+ return ""
+}
+
+func (x *Files) GetVersion() string {
+ if x != nil {
+ return x.Version
+ }
+ return ""
+}
+
+func (x *Files) GetFiles() []*File {
+ if x != nil {
+ return x.Files
+ }
+ return nil
+}
+
+// this generic message is used by autogen to identify and
+// then dump the uuid and version from any arbitrary .pb file
+type Identify struct {
+ Lock sync.RWMutex // auto-added by go.wit.com/apps/autogenpb
+
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` //
+ Version int64 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"` //
+}
+
+func (x *Identify) Reset() {
+ *x = Identify{}
+ mi := &file_file_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Identify) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Identify) ProtoMessage() {}
+
+func (x *Identify) ProtoReflect() protoreflect.Message {
+ mi := &file_file_proto_msgTypes[6]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Identify.ProtoReflect.Descriptor instead.
+func (*Identify) Descriptor() ([]byte, []int) {
+ return file_file_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *Identify) GetUuid() string {
+ if x != nil {
+ return x.Uuid
+ }
+ return ""
+}
+
+func (x *Identify) GetVersion() int64 {
+ if x != nil {
+ return x.Version
+ }
+ return 0
+}
+
+var File_file_proto protoreflect.FileDescriptor
+
+var file_file_proto_rawDesc = []byte{
+ 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x6d, 0x61,
+ 0x69, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x06, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x72, 0x12, 0x18, 0x0a,
+ 0x07, 0x76, 0x61, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
+ 0x76, 0x61, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x54, 0x79,
+ 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x61, 0x72, 0x54, 0x79, 0x70,
+ 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65,
+ 0x64, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x61, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x68,
+ 0x61, 0x73, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09,
+ 0x68, 0x61, 0x73, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x22, 0xd5, 0x02, 0x0a, 0x07, 0x4d, 0x73,
+ 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63,
+ 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63,
+ 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x6f, 0x4d, 0x61, 0x72, 0x73, 0x68,
+ 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x64, 0x6f, 0x4d, 0x61, 0x72, 0x73,
+ 0x68, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x6f, 0x4d, 0x75, 0x74, 0x65, 0x78, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x6f, 0x4d, 0x75, 0x74, 0x65, 0x78, 0x12, 0x24, 0x0a,
+ 0x0d, 0x64, 0x6f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x4d, 0x75, 0x74, 0x65, 0x78, 0x18, 0x05,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x6f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x4d, 0x75,
+ 0x74, 0x65, 0x78, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x75, 0x74, 0x65, 0x78, 0x46, 0x6f, 0x75, 0x6e,
+ 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6d, 0x75, 0x74, 0x65, 0x78, 0x46, 0x6f,
+ 0x75, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28,
+ 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75,
+ 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12,
+ 0x20, 0x0a, 0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e,
+ 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x72, 0x52, 0x04, 0x76, 0x61, 0x72,
+ 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x65, 0x65, 0x64, 0x49, 0x74, 0x65, 0x72, 0x18, 0x0a, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x65, 0x65, 0x64, 0x49, 0x74, 0x65, 0x72, 0x12, 0x18, 0x0a,
+ 0x07, 0x6e, 0x65, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
+ 0x6e, 0x65, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x6f, 0x4d, 0x75, 0x74,
+ 0x65, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6e, 0x6f, 0x4d, 0x75, 0x74, 0x65,
+ 0x78, 0x22, 0x8a, 0x01, 0x0a, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73,
+ 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x73, 0x67,
+ 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x54, 0x79, 0x70, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x61, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18,
+ 0x0a, 0x07, 0x76, 0x61, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x07, 0x76, 0x61, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x6b,
+ 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b,
+ 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6e, 0x65, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x22, 0x6c,
+ 0x0a, 0x04, 0x46, 0x69, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x18,
+ 0x0a, 0x07, 0x76, 0x61, 0x72, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x07, 0x76, 0x61, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x4e,
+ 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x61, 0x72, 0x4e, 0x61,
+ 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x07, 0x6e, 0x65, 0x65, 0x64, 0x41, 0x6c, 0x6c, 0x22, 0xd9, 0x03, 0x0a,
+ 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12,
+ 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70,
+ 0x62, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x0a, 0x70, 0x62, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66,
+ 0x69, 0x6c, 0x65, 0x62, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66,
+ 0x69, 0x6c, 0x65, 0x62, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x05, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x07,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x4e,
+ 0x61, 0x6d, 0x65, 0x52, 0x05, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x04, 0x62, 0x61,
+ 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x2e,
+ 0x4d, 0x73, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x29, 0x0a,
+ 0x08, 0x6d, 0x73, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x0d, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x08,
+ 0x6d, 0x73, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x09, 0x73, 0x6f, 0x72, 0x74,
+ 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x61,
+ 0x69, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74,
+ 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x69, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x70,
+ 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x46, 0x69,
+ 0x6c, 0x65, 0x2e, 0x49, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
+ 0x07, 0x69, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x70, 0x12, 0x22, 0x0a, 0x06, 0x74, 0x6f, 0x53, 0x6f,
+ 0x72, 0x74, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x2e,
+ 0x53, 0x6f, 0x72, 0x74, 0x52, 0x06, 0x74, 0x6f, 0x53, 0x6f, 0x72, 0x74, 0x1a, 0x3a, 0x0a, 0x0c,
+ 0x49, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+ 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
+ 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x57, 0x0a, 0x05, 0x46, 0x69, 0x6c, 0x65,
+ 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
+ 0x20, 0x0a, 0x05, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a,
+ 0x2e, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x46, 0x69, 0x6c, 0x65,
+ 0x73, 0x22, 0x38, 0x0a, 0x08, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x12, 0x12, 0x0a,
+ 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69,
+ 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_file_proto_rawDescOnce sync.Once
+ file_file_proto_rawDescData = file_file_proto_rawDesc
+)
+
+func file_file_proto_rawDescGZIP() []byte {
+ file_file_proto_rawDescOnce.Do(func() {
+ file_file_proto_rawDescData = protoimpl.X.CompressGZIP(file_file_proto_rawDescData)
+ })
+ return file_file_proto_rawDescData
+}
+
+var file_file_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
+var file_file_proto_goTypes = []any{
+ (*MsgVar)(nil), // 0: main.MsgVar
+ (*MsgName)(nil), // 1: main.MsgName
+ (*Sort)(nil), // 2: main.Sort
+ (*Find)(nil), // 3: main.Find
+ (*File)(nil), // 4: main.File
+ (*Files)(nil), // 5: main.Files
+ (*Identify)(nil), // 6: main.Identify
+ nil, // 7: main.File.IterMapEntry
+}
+var file_file_proto_depIdxs = []int32{
+ 0, // 0: main.MsgName.vars:type_name -> main.MsgVar
+ 1, // 1: main.File.bases:type_name -> main.MsgName
+ 1, // 2: main.File.base:type_name -> main.MsgName
+ 1, // 3: main.File.msgNames:type_name -> main.MsgName
+ 1, // 4: main.File.sortNames:type_name -> main.MsgName
+ 7, // 5: main.File.iterMap:type_name -> main.File.IterMapEntry
+ 2, // 6: main.File.toSort:type_name -> main.Sort
+ 4, // 7: main.Files.Files:type_name -> main.File
+ 8, // [8:8] is the sub-list for method output_type
+ 8, // [8:8] is the sub-list for method input_type
+ 8, // [8:8] is the sub-list for extension type_name
+ 8, // [8:8] is the sub-list for extension extendee
+ 0, // [0:8] is the sub-list for field type_name
+}
+
+func init() { file_file_proto_init() }
+func file_file_proto_init() {
+ if File_file_proto != nil {
+ return
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_file_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 8,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_file_proto_goTypes,
+ DependencyIndexes: file_file_proto_depIdxs,
+ MessageInfos: file_file_proto_msgTypes,
+ }.Build()
+ File_file_proto = out.File
+ file_file_proto_rawDesc = nil
+ file_file_proto_goTypes = nil
+ file_file_proto_depIdxs = nil
+}
diff --git a/file.sort.pb.go b/file.sort.pb.go
new file mode 100644
index 0000000..313bd20
--- /dev/null
+++ b/file.sort.pb.go
@@ -0,0 +1,412 @@
+// Code generated by go.wit.com/apps/autogenpb DO NOT EDIT.
+// This file was autogenerated with autogenpb v0.0.42-1-gf74f364 2025.01.13_0345
+// go install go.wit.com/apps/autogenpb@latest
+//
+// define which structs (messages) you want to use in the .proto file
+// Then sort.pb.go and marshal.pb.go files are autogenerated
+//
+// autogenpb uses it and has an example .proto file with instructions
+//
+
+package main
+
+import (
+ "fmt"
+ "sync"
+)
+
+// a simple global lock
+var fileMu sync.RWMutex
+
+// START SORT
+
+// DEFINE THE Files ITERATOR.
+// itializes a new iterator.
+func newFilesIterator(things []*Files) *FilesIterator {
+ return &FilesIterator{things: things}
+}
+
+type FilesIterator struct {
+ sync.RWMutex // this isn't getting used properly yet?
+
+ things []*Files
+ index int
+}
+
+func (it *FilesIterator) Scan() bool {
+ if it.index >= len(it.things) {
+ return false
+ }
+ it.index++
+ return true
+}
+
+// Next() returns the next thing in the array
+func (it *FilesIterator) Next() *Files {
+ if it.things[it.index-1] == nil {
+ fmt.Println("Next() error in FilesIterator", it.index)
+ }
+ return it.things[it.index-1]
+}
+
+// END DEFINE THE ITERATOR
+
+// DEFINE THE File ITERATOR.
+// itializes a new iterator.
+func newFileIterator(things []*File) *FileIterator {
+ return &FileIterator{things: things}
+}
+
+type FileIterator struct {
+ sync.RWMutex // this isn't getting used properly yet?
+
+ things []*File
+ index int
+}
+
+func (it *FileIterator) Scan() bool {
+ if it.index >= len(it.things) {
+ return false
+ }
+ it.index++
+ return true
+}
+
+// Next() returns the next thing in the array
+func (it *FileIterator) Next() *File {
+ if it.things[it.index-1] == nil {
+ fmt.Println("Next() error in FileIterator", it.index)
+ }
+ return it.things[it.index-1]
+}
+
+// END DEFINE THE ITERATOR
+
+// DEFINE THE MsgVar ITERATOR.
+// itializes a new iterator.
+func newMsgVarIterator(things []*MsgVar) *MsgVarIterator {
+ return &MsgVarIterator{things: things}
+}
+
+type MsgVarIterator struct {
+ sync.RWMutex // this isn't getting used properly yet?
+
+ things []*MsgVar
+ index int
+}
+
+func (it *MsgVarIterator) Scan() bool {
+ if it.index >= len(it.things) {
+ return false
+ }
+ it.index++
+ return true
+}
+
+// Next() returns the next thing in the array
+func (it *MsgVarIterator) Next() *MsgVar {
+ if it.things[it.index-1] == nil {
+ fmt.Println("Next() error in MsgVarIterator", it.index)
+ }
+ return it.things[it.index-1]
+}
+
+// END DEFINE THE ITERATOR
+
+// DEFINE THE MsgName ITERATOR.
+// itializes a new iterator.
+func newMsgNameIterator(things []*MsgName) *MsgNameIterator {
+ return &MsgNameIterator{things: things}
+}
+
+type MsgNameIterator struct {
+ sync.RWMutex // this isn't getting used properly yet?
+
+ things []*MsgName
+ index int
+}
+
+func (it *MsgNameIterator) Scan() bool {
+ if it.index >= len(it.things) {
+ return false
+ }
+ it.index++
+ return true
+}
+
+// Next() returns the next thing in the array
+func (it *MsgNameIterator) Next() *MsgName {
+ if it.things[it.index-1] == nil {
+ fmt.Println("Next() error in MsgNameIterator", it.index)
+ }
+ return it.things[it.index-1]
+}
+
+// END DEFINE THE ITERATOR
+
+// DEFINE THE Sort ITERATOR.
+// itializes a new iterator.
+func newSortIterator(things []*Sort) *SortIterator {
+ return &SortIterator{things: things}
+}
+
+type SortIterator struct {
+ sync.RWMutex // this isn't getting used properly yet?
+
+ things []*Sort
+ index int
+}
+
+func (it *SortIterator) Scan() bool {
+ if it.index >= len(it.things) {
+ return false
+ }
+ it.index++
+ return true
+}
+
+// Next() returns the next thing in the array
+func (it *SortIterator) Next() *Sort {
+ if it.things[it.index-1] == nil {
+ fmt.Println("Next() error in SortIterator", it.index)
+ }
+ return it.things[it.index-1]
+}
+
+// END DEFINE THE ITERATOR
+
+// DEFINE THE Find ITERATOR.
+// itializes a new iterator.
+func newFindIterator(things []*Find) *FindIterator {
+ return &FindIterator{things: things}
+}
+
+type FindIterator struct {
+ sync.RWMutex // this isn't getting used properly yet?
+
+ things []*Find
+ index int
+}
+
+func (it *FindIterator) Scan() bool {
+ if it.index >= len(it.things) {
+ return false
+ }
+ it.index++
+ return true
+}
+
+// Next() returns the next thing in the array
+func (it *FindIterator) Next() *Find {
+ if it.things[it.index-1] == nil {
+ fmt.Println("Next() error in FindIterator", it.index)
+ }
+ return it.things[it.index-1]
+}
+
+// END DEFINE THE ITERATOR
+
+// DEFINE THE Identify ITERATOR.
+// itializes a new iterator.
+func newIdentifyIterator(things []*Identify) *IdentifyIterator {
+ return &IdentifyIterator{things: things}
+}
+
+type IdentifyIterator struct {
+ sync.RWMutex // this isn't getting used properly yet?
+
+ things []*Identify
+ index int
+}
+
+func (it *IdentifyIterator) Scan() bool {
+ if it.index >= len(it.things) {
+ return false
+ }
+ it.index++
+ return true
+}
+
+// Next() returns the next thing in the array
+func (it *IdentifyIterator) Next() *Identify {
+ if it.things[it.index-1] == nil {
+ fmt.Println("Next() error in IdentifyIterator", it.index)
+ }
+ return it.things[it.index-1]
+}
+
+// END DEFINE THE ITERATOR
+
+// safely returns a slice of pointers to the FRUIT protobufs
+func (x *Files) allFiles() []*File {
+ x.Lock.RLock()
+ defer x.Lock.RUnlock()
+
+ // Create a new slice to hold pointers to each FRUIT
+ var tmp []*File
+ tmp = make([]*File, len(x.Files))
+ for i, p := range x.Files {
+ tmp[i] = p // Copy pointers for safe iteration
+ }
+
+ return tmp
+}
+
+// safely returns a slice of pointers to the FRUIT protobufs
+func (x *File) allMsgNames() []*MsgName {
+ x.Lock.RLock()
+ defer x.Lock.RUnlock()
+
+ // Create a new slice to hold pointers to each FRUIT
+ var tmp []*MsgName
+ tmp = make([]*MsgName, len(x.MsgNames))
+ for i, p := range x.MsgNames {
+ tmp[i] = p // Copy pointers for safe iteration
+ }
+
+ return tmp
+}
+
+// safely returns a slice of pointers to the FRUIT protobufs
+func (x *File) allSortNames() []*MsgName {
+ x.Lock.RLock()
+ defer x.Lock.RUnlock()
+
+ // Create a new slice to hold pointers to each FRUIT
+ var tmp []*MsgName
+ tmp = make([]*MsgName, len(x.SortNames))
+ for i, p := range x.SortNames {
+ tmp[i] = p // Copy pointers for safe iteration
+ }
+
+ return tmp
+}
+
+// safely returns a slice of pointers to the FRUIT protobufs
+func (x *File) allToSort() []*Sort {
+ x.Lock.RLock()
+ defer x.Lock.RUnlock()
+
+ // Create a new slice to hold pointers to each FRUIT
+ var tmp []*Sort
+ tmp = make([]*Sort, len(x.ToSort))
+ for i, p := range x.ToSort {
+ tmp[i] = p // Copy pointers for safe iteration
+ }
+
+ return tmp
+}
+
+// safely returns a slice of pointers to the FRUIT protobufs
+func (x *MsgName) allVars() []*MsgVar {
+ x.Lock.RLock()
+ defer x.Lock.RUnlock()
+
+ // Create a new slice to hold pointers to each FRUIT
+ var tmp []*MsgVar
+ tmp = make([]*MsgVar, len(x.Vars))
+ for i, p := range x.Vars {
+ tmp[i] = p // Copy pointers for safe iteration
+ }
+
+ return tmp
+}
+
+// safely returns a slice of pointers to the File protobufs
+func (x *Files) selectAllFiles() []*File {
+ x.Lock.RLock()
+ defer x.Lock.RUnlock()
+
+ // Create a new slice to hold pointers to each File
+ var tmp []*File
+ tmp = make([]*File, len(x.Files))
+ for i, p := range x.Files {
+ tmp[i] = p // Copy pointers for safe iteration
+ }
+
+ return tmp
+}
+
+// safely returns a slice of pointers to the MsgName protobufs
+func (x *File) selectAllMsgNames() []*MsgName {
+ x.Lock.RLock()
+ defer x.Lock.RUnlock()
+
+ // Create a new slice to hold pointers to each MsgName
+ var tmp []*MsgName
+ tmp = make([]*MsgName, len(x.MsgNames))
+ for i, p := range x.MsgNames {
+ tmp[i] = p // Copy pointers for safe iteration
+ }
+
+ return tmp
+}
+
+// safely returns a slice of pointers to the MsgName protobufs
+func (x *File) selectAllSortNames() []*MsgName {
+ x.Lock.RLock()
+ defer x.Lock.RUnlock()
+
+ // Create a new slice to hold pointers to each MsgName
+ var tmp []*MsgName
+ tmp = make([]*MsgName, len(x.SortNames))
+ for i, p := range x.SortNames {
+ tmp[i] = p // Copy pointers for safe iteration
+ }
+
+ return tmp
+}
+
+// safely returns a slice of pointers to the Sort protobufs
+func (x *File) selectAllToSort() []*Sort {
+ x.Lock.RLock()
+ defer x.Lock.RUnlock()
+
+ // Create a new slice to hold pointers to each Sort
+ var tmp []*Sort
+ tmp = make([]*Sort, len(x.ToSort))
+ for i, p := range x.ToSort {
+ tmp[i] = p // Copy pointers for safe iteration
+ }
+
+ return tmp
+}
+
+// safely returns a slice of pointers to the MsgVar protobufs
+func (x *MsgName) selectAllVars() []*MsgVar {
+ x.Lock.RLock()
+ defer x.Lock.RUnlock()
+
+ // Create a new slice to hold pointers to each MsgVar
+ var tmp []*MsgVar
+ tmp = make([]*MsgVar, len(x.Vars))
+ for i, p := range x.Vars {
+ tmp[i] = p // Copy pointers for safe iteration
+ }
+
+ return tmp
+}
+
+// END SORT
+
+func (x *Files) Len() int {
+ x.Lock.RLock()
+ defer x.Lock.RUnlock()
+
+ return len(x.Files)
+}
+
+// just a simple Append() shortcut (but still uses the mutex lock)
+func (x *Files) Append(y *File) {
+ x.Lock.Lock()
+ defer x.Lock.Unlock()
+
+ x.Files = append(x.Files, y)
+}
+
+func (x *Files) All() *FileIterator {
+ FilePointers := x.selectAllFiles()
+
+ iterator := newFileIterator(FilePointers)
+ return iterator
+}
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..92d151d
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,17 @@
+module go.wit.com/apps/autogenpb
+
+go 1.21
+
+toolchain go1.23.4
+
+require (
+ github.com/alexflint/go-arg v1.5.1
+ github.com/go-cmd/cmd v1.4.3
+ github.com/google/uuid v1.6.0
+ go.wit.com/lib/gui/shell v0.22.21
+ go.wit.com/log v0.22.10
+ golang.org/x/text v0.21.0
+ google.golang.org/protobuf v1.36.2
+)
+
+require github.com/alexflint/go-scalar v1.2.0 // indirect
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..7975e79
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,30 @@
+github.com/alexflint/go-arg v1.5.1 h1:nBuWUCpuRy0snAG+uIJ6N0UvYxpxA0/ghA/AaHxlT8Y=
+github.com/alexflint/go-arg v1.5.1/go.mod h1:A7vTJzvjoaSTypg4biM5uYNTkJ27SkNTArtYXnlqVO8=
+github.com/alexflint/go-scalar v1.2.0 h1:WR7JPKkeNpnYIOfHRa7ivM21aWAdHD0gEWHCx+WQBRw=
+github.com/alexflint/go-scalar v1.2.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/go-cmd/cmd v1.4.3 h1:6y3G+3UqPerXvPcXvj+5QNPHT02BUw7p6PsqRxLNA7Y=
+github.com/go-cmd/cmd v1.4.3/go.mod h1:u3hxg/ry+D5kwh8WvUkHLAMe2zQCaXd00t35WfQaOFk=
+github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg=
+github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+go.wit.com/lib/gui/shell v0.22.21 h1:WM8zJ5TLnOrzo54tT/Ld2cT9vWZIHEtrI/n7FGluib4=
+go.wit.com/lib/gui/shell v0.22.21/go.mod h1:K6+ULaS8xQFcsi1QoWHY1+PM/vS+IRSyJvbnJF9GyIQ=
+go.wit.com/log v0.22.10 h1:rlSgaYjvxbpcmi9UBQO3ESmbd/jiyFdRQFoGOvpCEUc=
+go.wit.com/log v0.22.10/go.mod h1:4uNPFBqhsAh8zNF+zxVEmC3c/9AZ8JeTfUUvRpddvLQ=
+golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
+golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/protobuf v1.36.2 h1:R8FeyR1/eLmkutZOM5CWghmo5itiG9z0ktFlTVLuTmU=
+google.golang.org/protobuf v1.36.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
+gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA=
+gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=