module Network.Telegram.API.Bot.Property.Identifiable (Identifiable (..), Identificator) where import "base" Data.Int (Int, Int64) 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.Message (Message (Direct, Forward)) 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 Message = Int type instance Identificator Origin = Int64 type instance Identificator Sender = Int type instance Identificator Update = Int instance Identifiable Message where identificator (Direct i _ _) = i identificator (Forward 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