diff options
author | Jacques Comeaux <jacquesrcomeaux@gmail.com> | 2022-05-29 16:07:59 -0500 |
---|---|---|
committer | Jacques Comeaux <jacquesrcomeaux@gmail.com> | 2022-05-29 16:07:59 -0500 |
commit | 8a06c083fab9c66e754c7ed5a75dd4d89131c43e (patch) | |
tree | 28098c165bce0d8ebb5dda2d5390e63ddca1ab1e /src/Data | |
parent | 399ab3ee1653bbc0da69e2cc299aa2a313e765b4 (diff) |
Improve error reporting
Diffstat (limited to 'src/Data')
-rw-r--r-- | src/Data/Message.hs | 81 | ||||
-rw-r--r-- | src/Data/Tomato.hs | 70 |
2 files changed, 0 insertions, 151 deletions
diff --git a/src/Data/Message.hs b/src/Data/Message.hs deleted file mode 100644 index c218cdc..0000000 --- a/src/Data/Message.hs +++ /dev/null @@ -1,81 +0,0 @@ -{-# LANGUAGE DeriveGeneric #-} -module Data.Message - ( InMessage (..) - , GMIUrl (..) - , OutMessage (..) - ) where - -import RIO - -import Data.Aeson ((.:), (.=)) -import Network.HTTP.Req - ( Url - , Scheme (Https) - , useHttpsURI - , renderUrl - ) - -import qualified Data.Aeson as Ae -import qualified Data.Aeson.Types as Ae -import qualified RIO.Vector as V -import qualified Text.URI as URI - -data InMessage = InMessage - { hasAttach :: !Bool - , groupId :: !Text - , isUser :: !Bool - , text :: !Text - } deriving (Show, Generic) - -instance NFData InMessage - -instance Ae.FromJSON InMessage where - parseJSON = Ae.withObject "InMessage" $ \o -> InMessage - <$> (o .: "attachments" >>= Ae.withArray "attachments" (pure . not . null)) - <*> o .: "group_id" - <*> ((==) ("user" :: Text) <$> o .: "sender_type") - <*> o .: "text" - - -newtype GMIUrl = GMIUrl - { unGMIUrl :: Url Https - } deriving Show - -instance Ae.FromJSON GMIUrl where - parseJSON = Ae.withObject "payload" $ \o -> do - p <- o .: "payload" - u <- p .: "url" - GMIUrl <$> toUrl u - where - toUrl :: Text -> Ae.Parser (Url Https) - toUrl t = maybe mzero pure $ fmap fst $ useHttpsURI =<< URI.mkURI t - -data OutMessage = OutMessage - { image :: !GMIUrl - } deriving Show - -instance Ae.ToJSON OutMessage where - toJSON om = Ae.object - [ "attachments" .= - ( Ae.Array $ V.singleton attach ) - -- , "bot_id" .= botId - ] - where - attach :: Ae.Value - attach = Ae.object - [ "type" .= ("image" :: Text) - , "url" .= url - ] - url :: Text - url = renderUrl $ unGMIUrl $ image om - - -- { - -- "bot_id" : "j5abcdefg", - -- "text" : "Hello world", - -- "attachments" : [ - -- { - -- "type" : "image", - -- "url" : "https://i.groupme.com/somethingsomething.large" - -- } - -- ] --- } diff --git a/src/Data/Tomato.hs b/src/Data/Tomato.hs deleted file mode 100644 index fc9b8b5..0000000 --- a/src/Data/Tomato.hs +++ /dev/null @@ -1,70 +0,0 @@ -module Data.Tomato - ( Links (..) - , Tomato (..) - , Urls (..) - ) where - -import RIO - -import Data.Aeson ((.:)) -import Network.HTTP.Req (Url, Scheme (Https), useHttpsURI) - -import qualified Data.Aeson as Ae -import qualified Data.Aeson.Types as Ae -import qualified Text.URI as URI - - -data Tomato = Tomato - { id :: !Text - , width :: !Word - , height :: !Word - , color :: !Text - , blur_hash :: !Text - , description :: !Text - , urls :: !Urls - , links :: !Links - } deriving Show - -instance Ae.FromJSON Tomato where - parseJSON = Ae.withObject "Tomato" $ \o -> Tomato - <$> o .: "id" - <*> o .: "width" - <*> o .: "height" - <*> o .: "color" - <*> o .: "blur_hash" - <*> o .: "description" - <*> o .: "urls" - <*> o .: "links" - -data Links = Links - { self :: !(Url Https) - , html :: !(Url Https) - , download :: !(Url Https) - , download_location :: !(Url Https) - } deriving Show - -instance Ae.FromJSON Links where - parseJSON = Ae.withObject "Links" $ \o -> Links - <$> (o .: "self" >>= toUrl) - <*> (o .: "html" >>= toUrl) - <*> (o .: "download" >>= toUrl) - <*> (o .: "download_location" >>= toUrl) - -data Urls = Urls - { raw :: !(Url Https) - , full :: !(Url Https) - , regular :: !(Url Https) - , small :: !(Url Https) - , thumb :: !(Url Https) - } deriving Show - -instance Ae.FromJSON Urls where - parseJSON = Ae.withObject "Urls" $ \o -> Urls - <$> (o .: "raw" >>= toUrl) - <*> (o .: "full" >>= toUrl) - <*> (o .: "regular" >>= toUrl) - <*> (o .: "small" >>= toUrl) - <*> (o .: "thumb" >>= toUrl) - -toUrl :: Text -> Ae.Parser (Url Https) -toUrl t = maybe mzero pure $ fmap fst $ useHttpsURI =<< URI.mkURI t |