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