// Code generated by go.wit.com/apps/autogenpb DO NOT EDIT. // This file was autogenerated with autogenpb v0.5.3-12-g0ccf2c0 2025-09-18_03:40:35_UTC // 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" "iter" "sync" "google.golang.org/protobuf/proto" ) // a simple global lock var eventMu sync.RWMutex func (x *Events) fixUuid() { if x == nil { return } if x.Uuid == "4e91f9e6-f545-4c72-bec4-ab951276da1d" { return } x.Uuid = "4e91f9e6-f545-4c72-bec4-ab951276da1d" x.Version = "v0.0.1 go.wit.com/lib/daemons/gus" } func NewEvents() *Events { x := new(Events) x.Uuid = "4e91f9e6-f545-4c72-bec4-ab951276da1d" x.Version = "v0.0.1 go.wit.com/lib/daemons/gus" return x } // START SORT // DEFINE THE Events SCANNER. // itializes a new scanner. func newEventsScanner(things []*Events) *EventsScanner { return &EventsScanner{things: things} } type EventsScanner struct { sync.Mutex things []*Events index int } func (it *EventsScanner) Scan() bool { if it.index >= len(it.things) { return false } it.Lock() it.index++ it.Unlock() return true } // Next() returns the next thing in the array func (it *EventsScanner) Next() *Events { if it.things[it.index-1] == nil { fmt.Println("Next() error in EventsScanner", it.index) } return it.things[it.index-1] } // END DEFINE THE SCANNER // DEFINE THE Event SCANNER. // itializes a new scanner. func newEventScanner(things []*Event) *EventScanner { return &EventScanner{things: things} } type EventScanner struct { sync.Mutex things []*Event index int } func (it *EventScanner) Scan() bool { if it.index >= len(it.things) { return false } it.Lock() it.index++ it.Unlock() return true } // Next() returns the next thing in the array func (it *EventScanner) Next() *Event { if it.things[it.index-1] == nil { fmt.Println("Next() error in EventScanner", it.index) } return it.things[it.index-1] } // END DEFINE THE SCANNER // DEFINE THE GusSocket SCANNER. // itializes a new scanner. func newGusSocketScanner(things []*GusSocket) *GusSocketScanner { return &GusSocketScanner{things: things} } type GusSocketScanner struct { sync.Mutex things []*GusSocket index int } func (it *GusSocketScanner) Scan() bool { if it.index >= len(it.things) { return false } it.Lock() it.index++ it.Unlock() return true } // Next() returns the next thing in the array func (it *GusSocketScanner) Next() *GusSocket { if it.things[it.index-1] == nil { fmt.Println("Next() error in GusSocketScanner", it.index) } return it.things[it.index-1] } // END DEFINE THE SCANNER // safely returns a slice of pointers to the FRUIT protobufs func (x *Events) allEvents() []*Event { eventMu.RLock() defer eventMu.RUnlock() // Create a new slice to hold pointers to each FRUIT var tmp []*Event tmp = make([]*Event, len(x.Events)) for i, p := range x.Events { tmp[i] = p // Copy pointers for safe iteration } return tmp } // safely returns a slice of pointers to the Event protobufs func (x *Events) selectAllEvents() []*Event { eventMu.RLock() defer eventMu.RUnlock() // Create a new slice to hold pointers to each Event var tmp []*Event tmp = make([]*Event, len(x.Events)) for i, p := range x.Events { tmp[i] = p // Copy pointers for safe iteration } return tmp } // END SORT func (x *Events) Len() int { eventMu.RLock() defer eventMu.RUnlock() return len(x.Events) } // a Append() shortcut (that does Clone() with a mutex) notsure if it really works func (x *Events) Append(y *Event) *Event { eventMu.Lock() defer eventMu.Unlock() z := proto.Clone(y).(*Event) x.Events = append(x.Events, z) return z } func (x *Events) All() *EventScanner { EventPointers := x.selectAllEvents() scanner := newEventScanner(EventPointers) return scanner } // Iterate 'for x := range' syntax using the awesome golang 1.24 'iter' func (x *Events) IterAll() iter.Seq[*Event] { items := x.selectAllEvents() // log.Println("Made All() Iter.Seq[] with length", len(items)) return func(yield func(*Event) bool) { for _, v := range items { if !yield(v) { return } } } } func (x *Events) Delete(y *Event) bool { eventMu.Lock() defer eventMu.Unlock() for i, _ := range x.Events { if x.Events[i] == y { x.Events[i] = x.Events[len(x.Events)-1] x.Events = x.Events[:len(x.Events)-1] return true } } return false }