packages feed

telega 0.1.1 → 0.1.2

raw patch · 7 files changed

+65/−25 lines, 7 files

Files

CHANGELOG.md view
@@ -3,3 +3,9 @@ * Add string identificator to `Callback` datatype * Define `Notification` datatype * Define `Droppable` typeclass++# 0.1.2+* Define `Member` datatype+* Add new `Membership` constructor to `Update` datatype+* Define `Has` typeclass to get access objects within other objects+* Replace `chat` lens on `Has Update Chat` instance
Network/Telegram/API/Bot.hs view
@@ -3,4 +3,5 @@ import Network.Telegram.API.Bot.Property as Exports import Network.Telegram.API.Bot.Capacity as Exports import Network.Telegram.API.Bot.Object as Exports+import Network.Telegram.API.Bot.Has as Exports import Network.Telegram.API.Bot.Core as Exports
+ Network/Telegram/API/Bot/Has.hs view
@@ -0,0 +1,6 @@+module Network.Telegram.API.Bot.Has (Has (..)) where++import "lens" Control.Lens (Lens')++class Has source target where+	focus :: Lens' source target
Network/Telegram/API/Bot/Object.hs view
@@ -2,6 +2,7 @@  import Network.Telegram.API.Bot.Object.Update as Exports import Network.Telegram.API.Bot.Object.Notification as Exports+import Network.Telegram.API.Bot.Object.Member as Exports import Network.Telegram.API.Bot.Object.Message as Exports import Network.Telegram.API.Bot.Object.Keyboard as Exports import Network.Telegram.API.Bot.Object.From as Exports
+ Network/Telegram/API/Bot/Object/Member.hs view
@@ -0,0 +1,19 @@+module Network.Telegram.API.Bot.Object.Member (Member (..)) where++import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))+import "aeson" Data.Aeson.Types (Object, Parser)+import "base" Control.Applicative (Alternative ((<|>)))++import Network.Telegram.API.Bot.Object.Chat (Chat)+import Network.Telegram.API.Bot.Object.From (From)++data Member = Gone Chat From | Joined Chat [From] deriving Show++instance FromJSON Member where+	parseJSON = withObject "Member" $ \v -> gone v <|> joined v where++		gone :: Object -> Parser Member+		gone v = Gone <$> v .: "chat" <*> v .: "left_chat_member"++		joined :: Object -> Parser Member+		joined v = Joined <$> v .: "chat" <*> v .: "new_chat_members"
Network/Telegram/API/Bot/Object/Update.hs view
@@ -1,42 +1,54 @@-module Network.Telegram.API.Bot.Object.Update (Update (..), chat) where+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 (Alternative ((<|>))) import "lens" Control.Lens (Lens') +import Network.Telegram.API.Bot.Has (Has (focus)) import Network.Telegram.API.Bot.Object.Callback (Callback (Datatext)) import Network.Telegram.API.Bot.Object.Chat (Chat)+import Network.Telegram.API.Bot.Object.Member (Member (Gone, Joined)) import Network.Telegram.API.Bot.Object.Message (Message (Textual, Command)) import Network.Telegram.API.Bot.Property.Identifiable 	(Identifiable (identificator), Identificator)  data Update-	= Incoming Int Message-	| Query Int Callback+	= Query Int Callback+	| Membership Int Member+	| Incoming Int Message 	deriving Show  type instance Identificator Update = Int  instance Identifiable Update where-	identificator (Incoming i _) = i 	identificator (Query i _) = i+	identificator (Membership i _) = i+	identificator (Incoming i _) = i  instance FromJSON Update where-	parseJSON = withObject "Update" $ \v -> query v <|> incoming v 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" -chat :: Lens' Update Chat-chat f (Incoming upd_id (Command msg_id chat_ from cmd)) =-	(\chat' -> Incoming upd_id (Command msg_id chat' from cmd)) <$> f chat_-chat f (Incoming upd_id (Textual msg_id chat_ from txt)) =-	(\chat' -> Incoming upd_id (Textual msg_id chat' from txt)) <$> f chat_-chat f (Query upd_id (Datatext cq_id (Command msg_id chat_ from cmd) dttxt)) =-	(\chat' -> Query upd_id (Datatext cq_id (Command msg_id chat' from cmd) dttxt)) <$> f chat_-chat f (Query upd_id (Datatext cq_id (Textual msg_id chat_ from txt) dttxt)) =-	(\chat' -> Query upd_id (Datatext cq_id (Textual msg_id chat' from txt) dttxt)) <$> f chat_+instance Has Update Chat where+	focus f (Incoming upd_id (Command msg_id chat_ from cmd)) =+		(\chat' -> Incoming upd_id (Command msg_id chat' from cmd)) <$> f chat_+	focus f (Incoming upd_id (Textual msg_id chat_ from txt)) =+		(\chat' -> Incoming upd_id (Textual msg_id chat' from txt)) <$> f chat_+	focus f (Query upd_id (Datatext cq_id (Command msg_id chat_ from cmd) dttxt)) =+		(\chat' -> Query upd_id (Datatext cq_id (Command msg_id chat' from cmd) dttxt)) <$> f chat_+	focus f (Query upd_id (Datatext cq_id (Textual msg_id chat_ from txt) dttxt)) =+		(\chat' -> Query upd_id (Datatext cq_id (Textual msg_id chat' from txt) dttxt)) <$> f chat_+	focus f (Membership upd_id (Gone chat_ users)) =+		(\chat' -> Membership upd_id (Gone chat' users)) <$> f chat_+	focus f (Membership upd_id (Joined chat_ users)) =+		(\chat' -> Membership upd_id (Joined chat' users)) <$> f chat_
telega.cabal view
@@ -1,5 +1,5 @@ name:                telega-version:             0.1.1+version:             0.1.2 synopsis:            Telegram Bot API binding description:         High-level bindings, typed entities, inline mode only homepage:            https://github.com/iokasimov/telega@@ -21,12 +21,14 @@   exposed-modules:     Network.Telegram.API.Bot     Network.Telegram.API.Bot.Core+    Network.Telegram.API.Bot.Has     Network.Telegram.API.Bot.Object     Network.Telegram.API.Bot.Object.Chat     Network.Telegram.API.Bot.Object.From     Network.Telegram.API.Bot.Object.Button     Network.Telegram.API.Bot.Object.Callback     Network.Telegram.API.Bot.Object.Keyboard+    Network.Telegram.API.Bot.Object.Member     Network.Telegram.API.Bot.Object.Message     Network.Telegram.API.Bot.Object.Notification     Network.Telegram.API.Bot.Object.Update@@ -38,15 +40,8 @@     Network.Telegram.API.Bot.Property     Network.Telegram.API.Bot.Property.Identifiable   build-depends: base == 4.*, transformers, lens, aeson, text, http-client, wreq-  default-extensions:-    DataKinds-    LambdaCase-    OverloadedStrings-    PackageImports-    ScopedTypeVariables-    TypeApplications-    TypeFamilies-    TypeFamilyDependencies-    TypeOperators+  default-extensions: DataKinds, LambdaCase, OverloadedStrings,+    MultiParamTypeClasses, PackageImports, ScopedTypeVariables,+    TypeApplications, TypeFamilies, TypeFamilyDependencies, TypeOperators   default-language: Haskell2010   ghc-options: -Wall -fno-warn-tabs