{-# LANGUAGE OverloadedStrings #-} module Request where import JSONTypes import Network.Wreq import qualified Network.Wreq as WR (Options) import Control.Lens import Data.Aeson import qualified Data.Text as T makeRequest :: (FromJSON a) => String -> WR.Options -> IO (Either T.Text a) makeRequest url opts = do r <- asJSON =<< getWith opts url pure $ case (r ^. responseBody) of (JSONResponse "ok" _ (Just d)) -> Right d (JSONResponse _ m _) -> Left m getMovies :: IO (Either T.Text JSONListMovies) getMovies = makeRequest "https://yts.mx/api/v2/list_movies.json" (defaults & param "limit" .~ ["50"]) queryMovies :: T.Text -> IO (Either T.Text JSONListMovies) queryMovies q = makeRequest "https://yts.mx/api/v2/list_movies.json" (defaults & param "query_term" .~ [q] & param "limit" .~ ["50"])