From 986e23c6c0b512c2e61f8a0385b6616284d077c5 Mon Sep 17 00:00:00 2001 From: Gisle Aune Date: Sun, 18 Oct 2020 12:28:09 +0200 Subject: [PATCH] add Event.Copy method. --- event.go | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/event.go b/event.go index e8c9e04..e0a7111 100644 --- a/event.go +++ b/event.go @@ -13,13 +13,14 @@ type Event struct { verb string name string - Time time.Time - Nick string - User string - Host string - Args []string - Text string - Tags map[string]string + Time time.Time + Nick string + User string + Host string + Args []string + Text string + Tags map[string]string + RenderTags map[string]string ctx context.Context cancel context.CancelFunc @@ -28,8 +29,6 @@ type Event struct { targets []Target targetIds map[Target]string - - RenderTags map[string]string } // NewEvent makes a new event with Kind, Verb, Time set and Args and Tags initialized. @@ -200,6 +199,30 @@ func (event *Event) MarshalJSON() ([]byte, error) { return json.Marshal(data) } +func (event *Event) Copy() *Event { + eventCopy := *event + if len(event.Args) > 0 { + eventCopy.Args = append(event.Args[:0:0], event.Args...) + } + if len(event.Tags) > 0 { + eventCopy.Tags = make(map[string]string, len(event.Tags)) + for key, value := range event.Tags { + eventCopy.Tags[key] = value + } + } + if len(event.RenderTags) > 0 { + eventCopy.RenderTags = make(map[string]string, len(event.RenderTags)) + for key, value := range event.RenderTags { + eventCopy.RenderTags[key] = value + } + } + if len(event.targets) > 0 { + eventCopy.targets = append(event.targets[:0:0], event.targets...) + } + + return &eventCopy +} + type eventJSONData struct { Name string `json:"name"` Kind string `json:"kind"`