{-# LANGUAGE DataKinds, KindSignatures, TemplateHaskell #-} module Web.Slack.Types.Id ( UserId, BotId, ChannelId, FileId, CommentId, GroupId, IMId, TeamId, Id, getId ) where import Data.Aeson import Data.Text (Text) import Control.Lens.TH data FieldType = TUser | TBot | TChannel | TFile | TComment | TGroup | TIM | TTeam deriving (Eq, Show) newtype Id (a :: FieldType) = Id { _getId :: Text } deriving (Show, Eq) instance ToJSON (Id a) where toJSON (Id uid) = String uid instance FromJSON (Id a) where parseJSON = withText "Id" (return . Id) type UserId = Id TUser type BotId = Id TBot type ChannelId = Id TChannel type FileId = Id TFile type CommentId = Id TComment type GroupId = Id TGroup type IMId = Id TIM type TeamId = Id TTeam makeLenses ''Id