From 570a8c91c1b12b24a147c0b307b25f35f3eaeb8a Mon Sep 17 00:00:00 2001
From: gjahn <gregor.jahn@bht-berlin.de>
Date: Fri, 8 Dec 2023 00:28:37 +0100
Subject: [PATCH] Store actual items in ephemeral storage instead of pointers

The location where the actual items should reside is in the store, while
only references are being returned when attempting to access an item.
---
 state/ephemeral.go  | 4 ++--
 state/item.go       | 4 ++--
 state/persistent.go | 5 +++--
 state/store.go      | 2 +-
 4 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/state/ephemeral.go b/state/ephemeral.go
index 0d37040..dc04c38 100644
--- a/state/ephemeral.go
+++ b/state/ephemeral.go
@@ -20,7 +20,7 @@ func NewEphemeralStore() *Ephemeral {
 }
 
 
-func ( e *Ephemeral ) Add( i *Item ) error {
+func ( e *Ephemeral ) Add( i Item ) error {
     if e.store == nil {
         return errors.New( "ephemeral storage not available" )
     }
@@ -60,7 +60,7 @@ func ( e *Ephemeral ) Fetch( name string ) ( *Item, error ) {
     if !found {
         return nil, nil
     }
-    return item, nil
+    return &item, nil
 }
 
 
diff --git a/state/item.go b/state/item.go
index ccfea74..dee218a 100644
--- a/state/item.go
+++ b/state/item.go
@@ -8,8 +8,8 @@ type Item struct {
 }
 
 
-func NewItem( name string, mimeType string, data []byte ) *Item {
-    return &Item{
+func NewItem( name string, mimeType string, data []byte ) Item {
+    return Item{
         name: name,
         mimeType: mimeType,
         data: data,
diff --git a/state/persistent.go b/state/persistent.go
index ae23264..b005e42 100644
--- a/state/persistent.go
+++ b/state/persistent.go
@@ -44,7 +44,7 @@ func NewPersistentStore( c *configuration.Config ) *Persistent {
 }
 
 
-func ( e *Persistent ) Add( i *Item ) error {
+func ( e *Persistent ) Add( i Item ) error {
     ctx, cancel := context.WithTimeout( context.TODO(), e.timeout )
     defer cancel()
 
@@ -82,7 +82,8 @@ func ( e *Persistent ) Fetch( name string ) ( *Item, error ) {
 
     var item *Item = nil
     if len( value ) >= 1 {
-        item = NewItem( name, value[ "mime" ], []byte( value[ "data" ] ) )
+        i := NewItem( name, value[ "mime" ], []byte( value[ "data" ] ) )
+        item = &i
     }
     return item, nil
 }
diff --git a/state/store.go b/state/store.go
index c8ec606..ec39599 100644
--- a/state/store.go
+++ b/state/store.go
@@ -3,7 +3,7 @@ package state
 
 
 type Store interface {
-    Add( i *Item ) error
+    Add( i Item ) error
     Remove( name string ) error
     Fetch( name string ) ( *Item, error )
     Show() ( []string, error )
-- 
GitLab