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  }