diff options
Diffstat (limited to 'src/Data/Tomato.hs')
-rw-r--r-- | src/Data/Tomato.hs | 70 |
1 files changed, 0 insertions, 70 deletions
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 |