socketio-0.1.1: Web/SocketIO/Types/Event.hs
--------------------------------------------------------------------------------
-- | Event data types
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE OverloadedStrings #-}
module Web.SocketIO.Types.Event
( Event(..)
, EventName
, EventType(..)
, Payload
, Package
) where
--------------------------------------------------------------------------------
import Web.SocketIO.Types.String
----------------------------------------------------------------------------------
import Control.Applicative
import Data.Aeson
--------------------------------------------------------------------------------
-- | Name of an Event
type EventName = Text
--------------------------------------------------------------------------------
-- | Payload carried by an Event
type Payload = Text
--------------------------------------------------------------------------------
-- | Event
data Event = Event EventName [Payload]
| NoEvent -- ^ some malformed shit
deriving (Show, Eq)
instance Serializable Event where
serialize = serialize . encode
instance FromJSON Event where
parseJSON (Object v) = Event <$>
v .: "name" <*>
v .:? "args" .!= []
parseJSON _ = return NoEvent
instance ToJSON Event where
toJSON (Event name []) = object ["name" .= name]
toJSON (Event name args) = object ["name" .= name, "args" .= args]
toJSON NoEvent = object []
--------------------------------------------------------------------------------
-- | For internal use only, indicates how Events are be triggered.
data EventType = Private -- ^ `Web.SocketIO.Types.Base.emit`
| Broadcast ByteString -- ^ `Web.SocketIO.Types.Base.broadcast`, with `SessionID` of the sender.
deriving (Show, Eq)
--------------------------------------------------------------------------------
-- | Event packed with EventType
type Package = (EventType, Event)