omnix-sopiga/framework/ingestion/deduplicator.go

34 lines
543 B
Go
Raw Permalink Normal View History

2026-08-07 12:21:42 +07:00
package ingestion
import "sync"
type Deduplicator struct {
mu sync.RWMutex
seen map[string]struct{}
}
func NewDeduplicator() *Deduplicator {
return &Deduplicator{
seen: make(map[string]struct{}),
}
}
func (d *Deduplicator) Exists(key string) bool {
d.mu.RLock()
defer d.mu.RUnlock()
_, ok := d.seen[key]
return ok
}
func (d *Deduplicator) Mark(key string) {
d.mu.Lock()
defer d.mu.Unlock()
d.seen[key] = struct{}{}
}
func (d *Deduplicator) Reset() {
d.mu.Lock()
defer d.mu.Unlock()
d.seen = make(map[string]struct{})
}