-- | Event type class. All events that can be applied to aggregate roots
-- are required have an instance for this class.
module Data.CQRS.Event
       ( Event(..)
       ) where

import Data.ByteString (ByteString)

-- | Event class.
class Event e where
  -- | Encode event into a strict ByteString.
  encodeEvent :: e -> ByteString
  -- | Decode event from a strict ByteString. To avoid corrupt
  -- event stores, any events that have ever been stored {b must}
  -- be decodable for all time.
  decodeEvent :: ByteString -> e