diff --git a/v2/extensions/dataref_extension.go b/v2/extensions/dataref_extension.go new file mode 100644 index 000000000..13f61f7ba --- /dev/null +++ b/v2/extensions/dataref_extension.go @@ -0,0 +1,36 @@ +/* + Copyright 2024 The CloudEvents Authors + SPDX-License-Identifier: Apache-2.0 +*/ + +package extensions + +import ( + "github.com/cloudevents/sdk-go/v2/event" + "net/url" +) + +const DataRefExtensionKey = "dataref" + +type DataRefExtension struct { + DataRef string `json:"dataref"` +} + +func AddDataRefExtension(e *event.Event, dataRef string) error { + if _, err := url.Parse(dataRef); err != nil { + return err + } + e.SetExtension(DataRefExtensionKey, dataRef) + return nil +} + +func GetDataRefExtension(e event.Event) (DataRefExtension, bool) { + if dataRefValue, ok := e.Extensions()[DataRefExtensionKey]; ok { + dataRefStr, ok := dataRefValue.(string) + if !ok { + return DataRefExtension{}, false + } + return DataRefExtension{DataRef: dataRefStr}, true + } + return DataRefExtension{}, false +} diff --git a/v2/extensions/dataref_extension_test.go b/v2/extensions/dataref_extension_test.go new file mode 100644 index 000000000..4508d8067 --- /dev/null +++ b/v2/extensions/dataref_extension_test.go @@ -0,0 +1,41 @@ +/* + Copyright 2024 The CloudEvents Authors + SPDX-License-Identifier: Apache-2.0 +*/ + +package extensions + +import ( + "testing" + + "github.com/cloudevents/sdk-go/v2/event" +) + +func TestAddDataRefExtensionValidURL(t *testing.T) { + e := event.New() + expectedDataRef := "https://example.com/data" + + err := AddDataRefExtension(&e, expectedDataRef) + if err != nil { + t.Fatalf("Failed to add DataRefExtension with valid URL: %s", err) + } +} + +func TestAddDataRefExtensionInvalidURL(t *testing.T) { + e := event.New() + invalidDataRef := "://invalid-url" + + err := AddDataRefExtension(&e, invalidDataRef) + if err == nil { + t.Fatal("Expected error when adding DataRefExtension with invalid URL, but got none") + } +} + +func TestGetDataRefExtensionNotFound(t *testing.T) { + e := event.New() + + _, ok := GetDataRefExtension(e) + if ok { + t.Fatal("Expected not to find DataRefExtension, but did") + } +}