45 lines
718 B
Go
45 lines
718 B
Go
package events
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
)
|
|
|
|
// Recording is a test Publisher that records events synchronously.
|
|
type Recording struct {
|
|
mu sync.Mutex
|
|
evs []any
|
|
}
|
|
|
|
// Publish appends ev.
|
|
func (r *Recording) Publish(_ context.Context, ev any) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
r.mu.Lock()
|
|
defer r.mu.Unlock()
|
|
r.evs = append(r.evs, ev)
|
|
}
|
|
|
|
// Len returns the number of recorded events.
|
|
func (r *Recording) Len() int {
|
|
if r == nil {
|
|
return 0
|
|
}
|
|
r.mu.Lock()
|
|
defer r.mu.Unlock()
|
|
return len(r.evs)
|
|
}
|
|
|
|
// Snapshot returns a copy of recorded events.
|
|
func (r *Recording) Snapshot() []any {
|
|
if r == nil {
|
|
return nil
|
|
}
|
|
r.mu.Lock()
|
|
defer r.mu.Unlock()
|
|
out := make([]any, len(r.evs))
|
|
copy(out, r.evs)
|
|
return out
|
|
}
|