packages feed

eventful-memory-0.1.3: tests/MemoryTestImport.hs

module MemoryTestImport
  ( makeDynamicTVarStore
  , EmbeddedState (..)
  , StreamEmbeddedState
  , GloballyOrderedEmbeddedState
  , emptyEmbeddedState
  , setEventMap
  , setProjectionMap
  ) where

import Control.Concurrent.STM

import Eventful.ProjectionCache.Memory
import Eventful.Serializer
import Eventful.Store.Memory
import Eventful.TestHelpers
import Eventful.UUID

makeDynamicTVarStore :: IO (EventStore CounterEvent STM, GloballyOrderedEventStore CounterEvent STM)
makeDynamicTVarStore = do
  tvar <- eventMapTVar
  let
    store = tvarEventStore tvar
    globalStore = tvarGloballyOrderedEventStore tvar
    store' = serializedEventStore dynamicSerializer store
    globalStore' = serializedGloballyOrderedEventStore dynamicSerializer globalStore
  return (store', globalStore')

data EmbeddedState state event key orderKey
  = EmbeddedState
  { _embeddedDummyArgument :: Int
  , embeddedEventMap :: EventMap event
  , embeddedProjectionMap :: ProjectionMap key orderKey state
  }

type StreamEmbeddedState state event = EmbeddedState state event UUID EventVersion
type GloballyOrderedEmbeddedState state event key = EmbeddedState state event key SequenceNumber

emptyEmbeddedState :: EmbeddedState state event key orderKey
emptyEmbeddedState = EmbeddedState 100 emptyEventMap emptyProjectionMap

setEventMap :: EmbeddedState state event key orderKey -> EventMap event -> EmbeddedState state event key orderKey
setEventMap state' eventMap = state' { embeddedEventMap = eventMap }

setProjectionMap
  :: EmbeddedState state event key orderKey
  -> ProjectionMap key orderKey state
  -> EmbeddedState state event key orderKey
setProjectionMap state' projectionMap = state' { embeddedProjectionMap = projectionMap }