// Package dedupe implements in-process event deduplication. package dedupe import ( "context" "fmt" "github.com/cloudevents/sdk-go/v2/event" ) // Deduplicator checks if an event is unique. type Deduplicator interface { // IsUnique checks if an event is unique AND adds it to the deduplication index. // TODO: deprecate or rename IsUnique IsUnique(ctx context.Context, namespace string, ev event.Event) (bool, error) // CheckUnique checks if an item is unique. CheckUnique(ctx context.Context, item Item) (bool, error) // Set adds the item(s) to the deduplicator Set(ctx context.Context, events ...Item) ([]Item, error) // CheckUniqueBatch checks if a batch of items is unique. CheckUniqueBatch(ctx context.Context, items []Item) (CheckUniqueBatchResult, error) // Close cleans up resources Close() error } type ItemSet map[Item]struct{} type CheckUniqueBatchResult struct { UniqueItems ItemSet AlreadyProcessedItems ItemSet } type Item struct { Namespace string ID string Source string } func (i Item) Key() string { return fmt.Sprintf("%s-%s-%s", i.Namespace, i.Source, i.ID) }