mirror of https://github.com/knative/docs.git
53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/cloudevents/sdk-go/v2/event"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// EventDefaulter is the function signature for extensions that are able
|
|
// to perform event defaulting.
|
|
type EventDefaulter func(ctx context.Context, event event.Event) event.Event
|
|
|
|
// DefaultIDToUUIDIfNotSet will inspect the provided event and assign a UUID to
|
|
// context.ID if it is found to be empty.
|
|
func DefaultIDToUUIDIfNotSet(ctx context.Context, event event.Event) event.Event {
|
|
if event.Context != nil {
|
|
if event.ID() == "" {
|
|
event.Context = event.Context.Clone()
|
|
event.SetID(uuid.New().String())
|
|
}
|
|
}
|
|
return event
|
|
}
|
|
|
|
// DefaultTimeToNowIfNotSet will inspect the provided event and assign a new
|
|
// Timestamp to context.Time if it is found to be nil or zero.
|
|
func DefaultTimeToNowIfNotSet(ctx context.Context, event event.Event) event.Event {
|
|
if event.Context != nil {
|
|
if event.Time().IsZero() {
|
|
event.Context = event.Context.Clone()
|
|
event.SetTime(time.Now())
|
|
}
|
|
}
|
|
return event
|
|
}
|
|
|
|
// NewDefaultDataContentTypeIfNotSet returns a defaulter that will inspect the
|
|
// provided event and set the provided content type if content type is found
|
|
// to be empty.
|
|
func NewDefaultDataContentTypeIfNotSet(contentType string) EventDefaulter {
|
|
return func(ctx context.Context, event event.Event) event.Event {
|
|
if event.Context != nil {
|
|
if event.DataContentType() == "" {
|
|
event.SetDataContentType(contentType)
|
|
}
|
|
}
|
|
return event
|
|
}
|
|
}
|