module Data.CQRS.Internal.PersistedEvent
       ( PersistedEvent(..)
       , mapPersistedEvent
       ) where

import Data.CQRS.GUID (GUID)

-- | Persisted Event.
data PersistedEvent e =
  PersistedEvent { peAggregateGUID :: !GUID -- ^ GUID of the aggregate.
                 , peEvent :: e             -- ^ Event.
                 , peSequenceNumber :: !Int -- ^ Sequence number within the aggregate.
                 , peGlobalVer :: !Int      -- ^ Global sequence number.
                 }

-- Transform the event data.
mapPersistedEvent :: (e -> e') -> PersistedEvent e -> PersistedEvent e'
mapPersistedEvent f (PersistedEvent g e v gv) = PersistedEvent g (f e) v gv