aboutsummaryrefslogtreecommitdiff
path: root/src/Data
diff options
context:
space:
mode:
authorJacques Comeaux <jacquesrcomeaux@gmail.com>2022-05-29 16:07:59 -0500
committerJacques Comeaux <jacquesrcomeaux@gmail.com>2022-05-29 16:07:59 -0500
commit8a06c083fab9c66e754c7ed5a75dd4d89131c43e (patch)
tree28098c165bce0d8ebb5dda2d5390e63ddca1ab1e /src/Data
parent399ab3ee1653bbc0da69e2cc299aa2a313e765b4 (diff)
Improve error reporting
Diffstat (limited to 'src/Data')
-rw-r--r--src/Data/Message.hs81
-rw-r--r--src/Data/Tomato.hs70
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