module HipBot.Internal.Types where
import qualified Data.Aeson as A
import Data.Monoid
import Data.Text (Text)
import qualified Data.Text as T
import Prelude
type OAuthId = Text
type RoomId = Int
type RoomName = Text
data RoomEvent
= RoomMessage
| RoomNotification
| RoomExit
| RoomEnter
| RoomTopicChange
deriving (Show, Eq)
instance A.ToJSON RoomEvent where
toJSON s = A.String $ case s of
RoomMessage -> "room_message"
RoomNotification -> "room_notification"
RoomExit -> "room_exit"
RoomEnter -> "room_enter"
RoomTopicChange -> "room_topic_change"
instance A.FromJSON RoomEvent where
parseJSON = A.withText "string" $ \case
"room_message" -> return RoomMessage
"room_notification" -> return RoomNotification
"room_exit" -> return RoomExit
"room_enter" -> return RoomEnter
"room_topic_change" -> return RoomTopicChange
s -> fail $ "unexpected room event" <> T.unpack s