flamingo.me/flamingo-commerce/v3@v3.11.0/checkout/infrastructure/contextstore/memory.go (about)

     1  package contextstore
     2  
     3  import (
     4  	"context"
     5  	"sync"
     6  
     7  	"flamingo.me/flamingo-commerce/v3/checkout/domain/placeorder/process"
     8  )
     9  
    10  type (
    11  	// Memory saves all contexts in a simple map
    12  	Memory struct {
    13  		mx      sync.RWMutex
    14  		storage map[string]process.Context
    15  	}
    16  )
    17  
    18  var _ process.ContextStore = new(Memory)
    19  
    20  // Inject dependencies
    21  func (m *Memory) Inject() *Memory {
    22  	m.storage = make(map[string]process.Context)
    23  
    24  	return m
    25  }
    26  
    27  // Store a given context
    28  func (m *Memory) Store(_ context.Context, key string, value process.Context) error {
    29  	m.mx.Lock()
    30  	defer m.mx.Unlock()
    31  	m.storage[key] = value
    32  
    33  	return nil
    34  }
    35  
    36  // Get a stored context
    37  func (m *Memory) Get(_ context.Context, key string) (process.Context, bool) {
    38  	m.mx.RLock()
    39  	defer m.mx.RUnlock()
    40  	value, ok := m.storage[key]
    41  
    42  	return value, ok
    43  }
    44  
    45  // Delete a stored context, nop if it doesn't exist
    46  func (m *Memory) Delete(_ context.Context, key string) error {
    47  	m.mx.Lock()
    48  	defer m.mx.Unlock()
    49  	delete(m.storage, key)
    50  
    51  	return nil
    52  }