telega-0.1.4: Network/Telegram/API/Bot/Object/Update.hs
module Network.Telegram.API.Bot.Object.Update (Update (..)) where
import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))
import "aeson" Data.Aeson.Types (Object, Parser)
import "base" Control.Applicative (Applicative ((<*>)), Alternative ((<|>)))
import "base" Data.Function (($))
import "base" Data.Functor ((<$>))
import "base" Data.Int (Int)
import "base" Text.Show (Show)
import Network.Telegram.API.Bot.Access (Access (access))
import Network.Telegram.API.Bot.Object.Callback (Callback)
import Network.Telegram.API.Bot.Object.Chat (Chat)
import Network.Telegram.API.Bot.Object.Moving (Moving)
import Network.Telegram.API.Bot.Object.Message (Message)
import Network.Telegram.API.Bot.Property.Identifiable
(Identifiable (identificator), Identificator)
data Update
= Query Int Callback
| Membership Int Moving
| Incoming Int Message
deriving Show
type instance Identificator Update = Int
instance Identifiable Update where
identificator (Query i _) = i
identificator (Membership i _) = i
identificator (Incoming i _) = i
instance FromJSON Update where
parseJSON = withObject "Update" $ \v ->
query v <|> membership v <|> incoming v where
query :: Object -> Parser Update
query v = Query <$> v .: "update_id" <*> v .: "callback_query"
membership :: Object -> Parser Update
membership v = Membership <$> v .: "update_id" <*> v .: "message"
incoming :: Object -> Parser Update
incoming v = Incoming <$> v .: "update_id" <*> v .: "message"
instance Access Chat Update where
access f (Incoming upd_id msg) = Incoming upd_id <$> access f msg
access f (Query upd_id cb) = Query upd_id <$> access f cb
access f (Membership upd_id mmb) = Membership upd_id <$> access f mmb