From 58f801fd15834b0a5b4abe1e7eaffd0eb15348e3 Mon Sep 17 00:00:00 2001 From: Matthias Wessendorf Date: Tue, 20 Feb 2024 08:41:18 +0100 Subject: [PATCH] Adding a simple dataref extension, similar to the java sdk Signed-off-by: Matthias Wessendorf --- v2/extensions/dataref_extension.go | 36 ++++++++++++++++++++++ v2/extensions/dataref_extension_test.go | 41 +++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 v2/extensions/dataref_extension.go create mode 100644 v2/extensions/dataref_extension_test.go 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") + } +}