github.com/gofiber/fiber/v2@v2.47.0/middleware/session/data.go (about) 1 package session 2 3 import ( 4 "sync" 5 ) 6 7 // go:generate msgp 8 // msgp -file="data.go" -o="data_msgp.go" -tests=false -unexported 9 type data struct { 10 sync.RWMutex 11 Data map[string]interface{} 12 } 13 14 var dataPool = sync.Pool{ 15 New: func() interface{} { 16 d := new(data) 17 d.Data = make(map[string]interface{}) 18 return d 19 }, 20 } 21 22 func acquireData() *data { 23 return dataPool.Get().(*data) //nolint:forcetypeassert // We store nothing else in the pool 24 } 25 26 func (d *data) Reset() { 27 d.Lock() 28 d.Data = make(map[string]interface{}) 29 d.Unlock() 30 } 31 32 func (d *data) Get(key string) interface{} { 33 d.RLock() 34 v := d.Data[key] 35 d.RUnlock() 36 return v 37 } 38 39 func (d *data) Set(key string, value interface{}) { 40 d.Lock() 41 d.Data[key] = value 42 d.Unlock() 43 } 44 45 func (d *data) Delete(key string) { 46 d.Lock() 47 delete(d.Data, key) 48 d.Unlock() 49 } 50 51 func (d *data) Keys() []string { 52 d.Lock() 53 keys := make([]string, 0, len(d.Data)) 54 for k := range d.Data { 55 keys = append(keys, k) 56 } 57 d.Unlock() 58 return keys 59 } 60 61 func (d *data) Len() int { 62 return len(d.Data) 63 }