{-# LANGUAGE OverloadedStrings, TemplateHaskell, RankNTypes, FunctionalDependencies, MultiParamTypeClasses, FlexibleInstances #-} module Web.Slack.Types.Session where import Control.Applicative import Data.Aeson import Web.Slack.Types.User import Web.Slack.Types.Time import Web.Slack.Types.Self import Web.Slack.Types.Team import Web.Slack.Types.Channel import Web.Slack.Types.Group import Web.Slack.Types.IM import Web.Slack.Types.Bot import Data.Text (Text) import Control.Lens.TH data SlackSession = SlackSession { _slackSelf :: Self , _slackTeam :: Team , _slackUsers :: [User] , _slackLatestEventTs :: SlackTimeStamp , _slackChannels :: [Channel] , _slackGroups :: [Group] , _slackIms :: [IM] , _slackBots :: [Bot] , _slackCacheVersion :: Text } deriving Show instance FromJSON SlackSession where parseJSON = withObject "SlackSession" (\o -> SlackSession <$> o .: "self" <*> o .: "team" <*> o .: "users" <*> o .: "latest_event_ts" <*> o .: "channels" <*> o .: "groups" <*> o .: "ims" <*> o .: "bots" <*> o .: "cache_version") makeLenses ''SlackSession