module Events ( ExampleEvent(..) ) where import Aggregates import Control.Monad (liftM) import Data.Serialize (Serialize(..)) import Data.Text (Text) import Data.Text.Encoding (decodeUtf8, encodeUtf8) import Data.Typeable (Typeable) import Data.Word (Word8) data ExampleEvent = CreateProject Text | RenameProject Text | AddTask ProjectId Text deriving (Typeable) instance Serialize ExampleEvent where put (CreateProject name) = do put (0 :: Word8) put $ encodeUtf8 name put (RenameProject name) = do put (1 :: Word8) put $ encodeUtf8 name put (AddTask pid tsd) = do put (2 :: Word8) put $ pid put $ encodeUtf8 tsd get = do i :: Word8 <- get case i of 0 -> do n <- liftM decodeUtf8 get return $ CreateProject n 1 -> do n <- liftM decodeUtf8 get return $ RenameProject n 2 -> do pid <- get tsd <- liftM decodeUtf8 get return $ AddTask pid tsd _ -> do fail $ "Unrecognized event type " ++ show i