{-# LANGUAGE OverloadedStrings, TemplateHaskell #-} module Web.Slack.Types.IM where import Data.Aeson import Data.Aeson.Types import Control.Applicative import Control.Lens.TH import Web.Slack.Types.Id import Web.Slack.Types.Time import {-# SOURCE #-} Web.Slack.Types.ChannelOpt (ChannelOpt) data IM = IM { _imId :: IMId , _imUser :: UserId , _imCreated :: Time , _imIsOpen :: Bool , _imIsIm :: Bool , _imOpt :: Maybe ChannelOpt } deriving (Show) makeLenses ''IM instance FromJSON IM where parseJSON = withObject "IM" (\o -> IM <$> o .: "id" <*> o .: "user" <*> o .: "created" <*> o .: "is_open" <*> o .: "is_im" <*> (pure $ parseMaybe parseJSON (Object o) :: Parser (Maybe ChannelOpt)))