@@ -232,3 +232,63 @@ func ExactNamePredicate(name, namespace string) predicate.Predicate {
232232 return obj .GetName () == name && (namespace == "*" || obj .GetNamespace () == namespace )
233233 })
234234}
235+
236+ /////////////////////////////
237+ /// EVENT TYPE PREDICATES ///
238+ /////////////////////////////
239+
240+ type EventType string
241+
242+ const (
243+ CreateEvent EventType = "create"
244+ UpdateEvent EventType = "update"
245+ DeleteEvent EventType = "delete"
246+ GenericEvent EventType = "generic"
247+ )
248+
249+ type eventTypePredicate struct {
250+ eventType EventType
251+ }
252+
253+ var _ predicate.Predicate = eventTypePredicate {}
254+
255+ func (e eventTypePredicate ) Create (_ event.TypedCreateEvent [client.Object ]) bool {
256+ return e .eventType == CreateEvent
257+ }
258+
259+ func (e eventTypePredicate ) Delete (_ event.TypedDeleteEvent [client.Object ]) bool {
260+ return e .eventType == DeleteEvent
261+ }
262+
263+ func (e eventTypePredicate ) Update (_ event.TypedUpdateEvent [client.Object ]) bool {
264+ return e .eventType == UpdateEvent
265+ }
266+
267+ func (e eventTypePredicate ) Generic (_ event.TypedGenericEvent [client.Object ]) bool {
268+ return e .eventType == GenericEvent
269+ }
270+
271+ // OnCreatePredicate returns a predicate that reacts only to create events.
272+ func OnCreatePredicate () predicate.Predicate {
273+ return OnEventTypePredicate (CreateEvent )
274+ }
275+
276+ // OnUpdatePredicate returns a predicate that reacts only to update events.
277+ func OnUpdatePredicate () predicate.Predicate {
278+ return OnEventTypePredicate (UpdateEvent )
279+ }
280+
281+ // OnDeletePredicate returns a predicate that reacts only to delete events.
282+ func OnDeletePredicate () predicate.Predicate {
283+ return OnEventTypePredicate (DeleteEvent )
284+ }
285+
286+ // OnGenericPredicate returns a predicate that reacts only to generic events.
287+ func OnGenericPredicate () predicate.Predicate {
288+ return OnEventTypePredicate (GenericEvent )
289+ }
290+
291+ // OnEventTypePredicate returns a predicate that reacts only to events of the specified type.
292+ func OnEventTypePredicate (eventType EventType ) predicate.Predicate {
293+ return eventTypePredicate {eventType : eventType }
294+ }
0 commit comments