From 90fa75e3700c186dd93c1c7a90b74297097b0641 Mon Sep 17 00:00:00 2001
From: Vasiliy Tolstov <v.tolstov@unistack.org>
Date: Fri, 7 Mar 2025 18:21:40 +0300
Subject: [PATCH] broker: add PublishOption

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
---
 broker/context.go | 10 ++++++++++
 broker/options.go |  6 +++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/broker/context.go b/broker/context.go
index 6115511c..08fe42de 100644
--- a/broker/context.go
+++ b/broker/context.go
@@ -42,6 +42,16 @@ func SetSubscribeOption(k, v interface{}) SubscribeOption {
 	}
 }
 
+// SetPublishOption returns a function to setup a context with given value
+func SetPublishOption(k, v interface{}) PublishOption {
+	return func(o *PublishOptions) {
+		if o.Context == nil {
+			o.Context = context.Background()
+		}
+		o.Context = context.WithValue(o.Context, k, v)
+	}
+}
+
 // SetOption returns a function to setup a context with given value
 func SetOption(k, v interface{}) Option {
 	return func(o *Options) {
diff --git a/broker/options.go b/broker/options.go
index a9900921..f98e7a62 100644
--- a/broker/options.go
+++ b/broker/options.go
@@ -79,11 +79,15 @@ type PublishOptions struct {
 	// BodyOnly flag says the message contains raw body bytes and don't need
 	// codec Marshal method
 	BodyOnly bool
+	// Context holds custom options
+	Context context.Context
 }
 
 // NewPublishOptions creates PublishOptions struct
 func NewPublishOptions(opts ...PublishOption) PublishOptions {
-	options := PublishOptions{}
+	options := PublishOptions{
+		Context: context.Background(),
+	}
 	for _, o := range opts {
 		o(&options)
 	}