module Network.Telegram.API.Bot.Property.Identifiable (Identifiable (..), Identificator) where import "base" Data.Int (Int, Int64) import "text" Data.Text (Text) import Network.Telegram.API.Bot.Object (Object) import Network.Telegram.API.Bot.Object.Update (Update (Query, Membership, Incoming)) import Network.Telegram.API.Bot.Object.Update.Callback (Callback (Datatext)) import Network.Telegram.API.Bot.Object.Update.Message (Message (Direct, Forward, Reply)) import Network.Telegram.API.Bot.Object.Update.Message.Origin (Origin (Private, Group, Supergroup, Channel)) import Network.Telegram.API.Bot.Object.Sender (Sender (Bot, User)) type family Identificator o = i class Object o => Identifiable o where {-# MINIMAL identificator #-} identificator :: o -> Identificator o type instance Identificator Callback = Text type instance Identificator Message = Int type instance Identificator Origin = Int64 type instance Identificator Sender = Int type instance Identificator Update = Int instance Identifiable Callback where identificator (Datatext i _ _) = i instance Identifiable Message where identificator (Direct i _ _) = i identificator (Forward i _ _) = i identificator (Reply i _ _ _) = i instance Identifiable Origin where identificator (Private i _) = i identificator (Group i _ _) = i identificator (Supergroup i _ _) = i identificator (Channel i _) = i instance Identifiable Sender where identificator (Bot i _ _ _ _) = i identificator (User i _ _ _ _) = i instance Identifiable Update where identificator (Query i _) = i identificator (Membership i _) = i identificator (Incoming i _) = i