From e7a5255ed66162cebea785af30d3b534649ab24b Mon Sep 17 00:00:00 2001 From: Igor Pashev Date: Thu, 23 Apr 2020 13:37:51 +0200 Subject: Make required all the query parameters --- lib/Web/OpenWeatherMap/API.hs | 24 +++++++++++++----------- lib/Web/OpenWeatherMap/Client.hs | 8 ++++---- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/lib/Web/OpenWeatherMap/API.hs b/lib/Web/OpenWeatherMap/API.hs index b9624f8..516845c 100644 --- a/lib/Web/OpenWeatherMap/API.hs +++ b/lib/Web/OpenWeatherMap/API.hs @@ -14,12 +14,14 @@ module Web.OpenWeatherMap.API import Data.Proxy (Proxy(..)) -import Servant.API ((:<|>)(..), (:>), Get, JSON, QueryParam) +import Servant.API ((:<|>)(..), (:>), Get, JSON, QueryParam', Required, Strict) import Servant.Client (ClientM, client) import Web.OpenWeatherMap.Types.CurrentWeather (CurrentWeather) import Web.OpenWeatherMap.Types.ForecastWeather (ForecastWeather) +type QueryParam = QueryParam' '[ Required, Strict] + type GetCurrentWeather = AppId :> Get '[ JSON] CurrentWeather type GetForecastWeather = AppId :> Get '[ JSON] ForecastWeather @@ -36,25 +38,25 @@ type API = Current :<|> Forecast -- | Request current weather in the city. weatherByName :: - Maybe String -- ^ City name, e. g. \"Moscow\" or \"Moscow,ru\". - -> Maybe String -- ^ API key. + String -- ^ City name, e. g. \"Moscow\" or \"Moscow,ru\". + -> String -- ^ API key. -> ClientM CurrentWeather -- | Request current weather at the geographic coordinates (in decimal degrees). weatherByCoord :: - Maybe Double -- ^ Latitude, e. g. 55.7522200 for Moscow. - -> Maybe Double -- ^ Longitude, e. g. 37.6155600 for Moscow. - -> Maybe String -- ^ API key. + Double -- ^ Latitude, e. g. 55.7522200 for Moscow. + -> Double -- ^ Longitude, e. g. 37.6155600 for Moscow. + -> String -- ^ API key. -> ClientM CurrentWeather -- | Request forecast weather in the city. forecastByName :: - Maybe String -- ^ City name, e. g. \"Moscow\" or \"Moscow,ru\". - -> Maybe String -- ^ API key. + String -- ^ City name, e. g. \"Moscow\" or \"Moscow,ru\". + -> String -- ^ API key. -> ClientM ForecastWeather -- | Request current weather at the geographic coordinates (in decimal degrees). forecastByCoord :: - Maybe Double -- ^ Latitude, e. g. 55.7522200 for Moscow. - -> Maybe Double -- ^ Longitude, e. g. 37.6155600 for Moscow. - -> Maybe String -- ^ API key. + Double -- ^ Latitude, e. g. 55.7522200 for Moscow. + -> Double -- ^ Longitude, e. g. 37.6155600 for Moscow. + -> String -- ^ API key. -> ClientM ForecastWeather (weatherByName :<|> weatherByCoord) :<|> (forecastByName :<|> forecastByCoord) = client (Proxy :: Proxy API) diff --git a/lib/Web/OpenWeatherMap/Client.hs b/lib/Web/OpenWeatherMap/Client.hs index 445e2a4..d760812 100644 --- a/lib/Web/OpenWeatherMap/Client.hs +++ b/lib/Web/OpenWeatherMap/Client.hs @@ -35,8 +35,8 @@ getWeather :: -> IO (Either ClientError CurrentWeather) getWeather appid loc = defaultEnv >>= runClientM (api loc appid) where - api (Name city) = API.weatherByName (Just city) . Just - api (Coord lat lon) = API.weatherByCoord (Just lat) (Just lon) . Just + api (Name city) = API.weatherByName city + api (Coord lat lon) = API.weatherByCoord lat lon -- | Make a request to OpenWeatherMap API -- and return forecast weather in given location. @@ -46,8 +46,8 @@ getForecast :: -> IO (Either ClientError ForecastWeather) getForecast appid loc = defaultEnv >>= runClientM (api loc appid) where - api (Name city) = API.forecastByName (Just city) . Just - api (Coord lat lon) = API.forecastByCoord (Just lat) (Just lon) . Just + api (Name city) = API.forecastByName city + api (Coord lat lon) = API.forecastByCoord lat lon defaultEnv :: IO ClientEnv defaultEnv = do -- cgit v1.2.3