package messaging

import (
	"context"
	"time"
)

type Event struct {
	Id        string
	Action    string
	Timestamp time.Time
	Body      []byte
	ctx       context.Context
}

// WithContext returns a shallow copy of Event with its context changed to ctx.
// The provided ctx must be non-nil.
func (e *Event) WithContext(ctx context.Context) *Event {
	if ctx == nil {
		panic("nil context")
	}

	e2 := new(Event)
	*e2 = *e
	e2.ctx = ctx

	return e2
}

// The returned context is always non-nil; it defaults to the background context.
// To change the context, use WithContext.
func (e *Event) Context() context.Context {
	if e.ctx != nil {
		return e.ctx
	}

	return context.Background()
}

package messaging

import (
	"context"
	"time"
)

type Event struct {
	Id        string
	Action    string
	Timestamp time.Time
	Body      []byte
	ctx       context.Context
}

// WithContext returns a shallow copy of Event with its context changed to ctx.
// The provided ctx must be non-nil.
func (e Event) WithContext(ctx context.Context) Event {
	if ctx == nil {
		panic("nil context")
	}

	e.ctx = ctx

	return e
}

// Context returns the current context; if nil, it defaults to the background context.
// To change the context, use WithContext.
func (e Event) Context() context.Context {
	if e.ctx != nil {
		return e.ctx
	}

	return context.Background()
}

Remove pointer in Event Context()
Remove pointer in Event Context()
