api-builder 0.11.0.0 → 0.12.0.0
raw patch · 4 files changed
+20/−11 lines, 4 filesdep +tlsdep ~aesondep ~basedep ~http-clientPVP ok
version bump matches the API change (PVP)
Dependencies added: tls
Dependency ranges changed: aeson, base, http-client, http-client-tls, http-types, transformers
API changes (from Hackage documentation)
- Network.API.Builder.Builder: _baseURL :: Builder -> Text
- Network.API.Builder.Builder: _customizeRequest :: Builder -> Request -> Request
- Network.API.Builder.Builder: _customizeRoute :: Builder -> Route -> Route
- Network.API.Builder.Builder: _name :: Builder -> Text
- Network.API.Builder.Builder: instance Show Builder
- Network.API.Builder.Error: instance Eq a => Eq (APIError a)
- Network.API.Builder.Error: instance Monoid (APIError a)
- Network.API.Builder.Error: instance Show a => Show (APIError a)
- Network.API.Builder.Examples.StackOverflow: instance Eq Question
- Network.API.Builder.Examples.StackOverflow: instance Eq Questions
- Network.API.Builder.Examples.StackOverflow: instance FromJSON Question
- Network.API.Builder.Examples.StackOverflow: instance FromJSON Questions
- Network.API.Builder.Examples.StackOverflow: instance Receivable Questions
- Network.API.Builder.Examples.StackOverflow: instance Show Question
- Network.API.Builder.Examples.StackOverflow: instance Show Questions
- Network.API.Builder.Examples.StackOverflow: isAnswered :: Question -> Bool
- Network.API.Builder.Examples.StackOverflow: score :: Question -> Int
- Network.API.Builder.Examples.StackOverflow: tags :: Question -> [Text]
- Network.API.Builder.Examples.StackOverflow: title :: Question -> Text
- Network.API.Builder.Query: instance ToQuery Bool
- Network.API.Builder.Query: instance ToQuery Int
- Network.API.Builder.Query: instance ToQuery Integer
- Network.API.Builder.Query: instance ToQuery Text
- Network.API.Builder.Query: instance ToQuery a => ToQuery (Maybe a)
- Network.API.Builder.Query: instance ToQuery a => ToQuery [a]
- Network.API.Builder.Receive: instance (Receivable a, Receivable b) => Receivable (a, b)
- Network.API.Builder.Receive: instance (Receivable a, Receivable b, Receivable c) => Receivable (a, b, c)
- Network.API.Builder.Receive: instance (Receivable a, Receivable b, Receivable c, Receivable d) => Receivable (a, b, c, d)
- Network.API.Builder.Receive: instance (Receivable a, Receivable b, Receivable c, Receivable d, Receivable e) => Receivable (a, b, c, d, e)
- Network.API.Builder.Receive: instance Eq a => Eq (JSONResponse a)
- Network.API.Builder.Receive: instance ErrorReceivable ()
- Network.API.Builder.Receive: instance ErrorReceivable ByteString
- Network.API.Builder.Receive: instance ErrorReceivable Value
- Network.API.Builder.Receive: instance FromJSON a => FromJSON (JSONResponse a)
- Network.API.Builder.Receive: instance FromJSON a => Receivable (JSONResponse a)
- Network.API.Builder.Receive: instance Ord a => Ord (JSONResponse a)
- Network.API.Builder.Receive: instance Read a => Read (JSONResponse a)
- Network.API.Builder.Receive: instance Receivable (Response ByteString)
- Network.API.Builder.Receive: instance Receivable ByteString
- Network.API.Builder.Receive: instance Receivable Value
- Network.API.Builder.Receive: instance Show a => Show (JSONResponse a)
- Network.API.Builder.Receive: unwrapJSON :: JSONResponse a -> a
- Network.API.Builder.Routes: httpMethod :: Route -> Method
- Network.API.Builder.Routes: instance Eq Route
- Network.API.Builder.Routes: instance Read Route
- Network.API.Builder.Routes: instance Show Route
- Network.API.Builder.Routes: urlParams :: Route -> [URLParam]
- Network.API.Builder.Routes: urlPieces :: Route -> [URLPiece]
- Network.API.Builder.Send: instance Sendable ()
- Network.API.Builder.Send: instance Sendable ByteString
- Network.API.Builder.Send: instance Sendable PostQuery
- Network.API.Builder.Send: instance Sendable Value
- Network.API.Builder.Send: instance Show PostQuery
- Network.API.Builder.Send.Multipart: instance Show Multipart
+ Network.API.Builder.Builder: [_baseURL] :: Builder -> Text
+ Network.API.Builder.Builder: [_customizeRequest] :: Builder -> Request -> Request
+ Network.API.Builder.Builder: [_customizeRoute] :: Builder -> Route -> Route
+ Network.API.Builder.Builder: [_name] :: Builder -> Text
+ Network.API.Builder.Builder: instance GHC.Show.Show Network.API.Builder.Builder.Builder
+ Network.API.Builder.Error: instance GHC.Base.Monoid (Network.API.Builder.Error.APIError a)
+ Network.API.Builder.Error: instance GHC.Classes.Eq a => GHC.Classes.Eq (Network.API.Builder.Error.APIError a)
+ Network.API.Builder.Error: instance GHC.Show.Show a => GHC.Show.Show (Network.API.Builder.Error.APIError a)
+ Network.API.Builder.Examples.StackOverflow: [isAnswered] :: Question -> Bool
+ Network.API.Builder.Examples.StackOverflow: [score] :: Question -> Int
+ Network.API.Builder.Examples.StackOverflow: [tags] :: Question -> [Text]
+ Network.API.Builder.Examples.StackOverflow: [title] :: Question -> Text
+ Network.API.Builder.Examples.StackOverflow: getAnswersSSL :: IO (Either (APIError ()) Questions)
+ Network.API.Builder.Examples.StackOverflow: instance Data.Aeson.Types.Class.FromJSON Network.API.Builder.Examples.StackOverflow.Question
+ Network.API.Builder.Examples.StackOverflow: instance Data.Aeson.Types.Class.FromJSON Network.API.Builder.Examples.StackOverflow.Questions
+ Network.API.Builder.Examples.StackOverflow: instance GHC.Classes.Eq Network.API.Builder.Examples.StackOverflow.Question
+ Network.API.Builder.Examples.StackOverflow: instance GHC.Classes.Eq Network.API.Builder.Examples.StackOverflow.Questions
+ Network.API.Builder.Examples.StackOverflow: instance GHC.Show.Show Network.API.Builder.Examples.StackOverflow.Question
+ Network.API.Builder.Examples.StackOverflow: instance GHC.Show.Show Network.API.Builder.Examples.StackOverflow.Questions
+ Network.API.Builder.Examples.StackOverflow: instance Network.API.Builder.Receive.Receivable Network.API.Builder.Examples.StackOverflow.Questions
+ Network.API.Builder.Examples.StackOverflow: stackOverflowSSL :: Builder
+ Network.API.Builder.Query: instance Network.API.Builder.Query.ToQuery Data.Text.Internal.Text
+ Network.API.Builder.Query: instance Network.API.Builder.Query.ToQuery GHC.Integer.Type.Integer
+ Network.API.Builder.Query: instance Network.API.Builder.Query.ToQuery GHC.Types.Bool
+ Network.API.Builder.Query: instance Network.API.Builder.Query.ToQuery GHC.Types.Int
+ Network.API.Builder.Query: instance Network.API.Builder.Query.ToQuery a => Network.API.Builder.Query.ToQuery (GHC.Base.Maybe a)
+ Network.API.Builder.Query: instance Network.API.Builder.Query.ToQuery a => Network.API.Builder.Query.ToQuery [a]
+ Network.API.Builder.Receive: [unwrapJSON] :: JSONResponse a -> a
+ Network.API.Builder.Receive: instance (Network.API.Builder.Receive.Receivable a, Network.API.Builder.Receive.Receivable b) => Network.API.Builder.Receive.Receivable (a, b)
+ Network.API.Builder.Receive: instance (Network.API.Builder.Receive.Receivable a, Network.API.Builder.Receive.Receivable b, Network.API.Builder.Receive.Receivable c) => Network.API.Builder.Receive.Receivable (a, b, c)
+ Network.API.Builder.Receive: instance (Network.API.Builder.Receive.Receivable a, Network.API.Builder.Receive.Receivable b, Network.API.Builder.Receive.Receivable c, Network.API.Builder.Receive.Receivable d) => Network.API.Builder.Receive.Receivable (a, b, c, d)
+ Network.API.Builder.Receive: instance (Network.API.Builder.Receive.Receivable a, Network.API.Builder.Receive.Receivable b, Network.API.Builder.Receive.Receivable c, Network.API.Builder.Receive.Receivable d, Network.API.Builder.Receive.Receivable e) => Network.API.Builder.Receive.Receivable (a, b, c, d, e)
+ Network.API.Builder.Receive: instance Data.Aeson.Types.Class.FromJSON a => Data.Aeson.Types.Class.FromJSON (Network.API.Builder.Receive.JSONResponse a)
+ Network.API.Builder.Receive: instance Data.Aeson.Types.Class.FromJSON a => Network.API.Builder.Receive.Receivable (Network.API.Builder.Receive.JSONResponse a)
+ Network.API.Builder.Receive: instance GHC.Classes.Eq a => GHC.Classes.Eq (Network.API.Builder.Receive.JSONResponse a)
+ Network.API.Builder.Receive: instance GHC.Classes.Ord a => GHC.Classes.Ord (Network.API.Builder.Receive.JSONResponse a)
+ Network.API.Builder.Receive: instance GHC.Read.Read a => GHC.Read.Read (Network.API.Builder.Receive.JSONResponse a)
+ Network.API.Builder.Receive: instance GHC.Show.Show a => GHC.Show.Show (Network.API.Builder.Receive.JSONResponse a)
+ Network.API.Builder.Receive: instance Network.API.Builder.Receive.ErrorReceivable ()
+ Network.API.Builder.Receive: instance Network.API.Builder.Receive.ErrorReceivable Data.Aeson.Types.Internal.Value
+ Network.API.Builder.Receive: instance Network.API.Builder.Receive.ErrorReceivable Data.ByteString.Lazy.Internal.ByteString
+ Network.API.Builder.Receive: instance Network.API.Builder.Receive.Receivable (Network.HTTP.Client.Types.Response Data.ByteString.Lazy.Internal.ByteString)
+ Network.API.Builder.Receive: instance Network.API.Builder.Receive.Receivable Data.Aeson.Types.Internal.Value
+ Network.API.Builder.Receive: instance Network.API.Builder.Receive.Receivable Data.ByteString.Lazy.Internal.ByteString
+ Network.API.Builder.Routes: [httpMethod] :: Route -> Method
+ Network.API.Builder.Routes: [urlParams] :: Route -> [URLParam]
+ Network.API.Builder.Routes: [urlPieces] :: Route -> [URLPiece]
+ Network.API.Builder.Routes: instance GHC.Classes.Eq Network.API.Builder.Routes.Route
+ Network.API.Builder.Routes: instance GHC.Read.Read Network.API.Builder.Routes.Route
+ Network.API.Builder.Routes: instance GHC.Show.Show Network.API.Builder.Routes.Route
+ Network.API.Builder.Send: instance GHC.Show.Show Network.API.Builder.Send.PostQuery
+ Network.API.Builder.Send: instance Network.API.Builder.Send.Sendable ()
+ Network.API.Builder.Send: instance Network.API.Builder.Send.Sendable Data.Aeson.Types.Internal.Value
+ Network.API.Builder.Send: instance Network.API.Builder.Send.Sendable Data.ByteString.Lazy.Internal.ByteString
+ Network.API.Builder.Send: instance Network.API.Builder.Send.Sendable Network.API.Builder.Send.PostQuery
+ Network.API.Builder.Send: useToJSON :: ToJSON a => Builder -> Route -> a -> Maybe Request
+ Network.API.Builder.Send.Multipart: instance GHC.Show.Show Network.API.Builder.Send.Multipart.Multipart
Files
- api-builder.cabal +8/−7
- src/Network/API/Builder/API.hs +0/−1
- src/Network/API/Builder/Examples/StackOverflow.hs +6/−0
- src/Network/API/Builder/Send.hs +6/−3
api-builder.cabal view
@@ -1,5 +1,5 @@ name: api-builder-version: 0.11.0.0+version: 0.12.0.0 synopsis: Library for easily building REST API wrappers in Haskell license: BSD3 license-file: LICENSE@@ -33,16 +33,17 @@ Network.API.Builder.Send Network.API.Builder.Send.Multipart build-depends:- base >= 4.6 && < 4.9,- aeson >= 0.9 && < 0.10,+ base >= 4.6 && < 4.10,+ aeson >= 0.9 && < 0.12, bifunctors >= 4.0 && < 6.0, bytestring == 0.10.*, HTTP == 4000.*,- http-client >= 0.4.11 && < 0.4.21,- http-client-tls >= 0.2 && < 0.2.3,- http-types == 0.8.*,+ http-client >= 0.4.30 && < 0.6,+ http-client-tls >= 0.2 && < 0.4,+ http-types >= 0.8 && < 0.10, text == 1.*,- transformers >= 0.4 && < 0.5+ tls >= 1.2 && < 1.4,+ transformers >= 0.4 && < 0.6 hs-source-dirs: src/ default-language: Haskell2010 default-extensions:
src/Network/API/Builder/API.hs view
@@ -81,7 +81,6 @@ execAPI b s api = do m <- liftIO $ newManager tlsManagerSettings (res, _, _) <- runAPI b m s api- liftIO $ closeManager m return res -- | Runs an @API@ by executing its transformer stack and dumping it all into @IO@.
src/Network/API/Builder/Examples/StackOverflow.hs view
@@ -35,6 +35,9 @@ stackOverflow :: Builder stackOverflow = basicBuilder "StackOverflow API" "http://api.stackexchange.com" +stackOverflowSSL :: Builder+stackOverflowSSL = basicBuilder "StackOverflow API" "https://api.stackexchange.com"+ answersRoute :: Route answersRoute = Route { urlPieces = [ "2.2", "questions" ] , urlParams = [ "order" =. ("desc" :: Text)@@ -44,3 +47,6 @@ getAnswers :: IO (Either (APIError ()) Questions) getAnswers = execAPI stackOverflow () $ runRoute answersRoute++getAnswersSSL :: IO (Either (APIError ()) Questions)+getAnswersSSL = execAPI stackOverflowSSL () $ runRoute answersRoute
src/Network/API/Builder/Send.hs view
@@ -18,7 +18,7 @@ send builder r () = case httpMethod r of "POST" -> do- req <- parseUrl $ Text.unpack $ routeURL (_baseURL builder) (_customizeRoute builder r)+ req <- parseUrlThrow $ Text.unpack $ routeURL (_baseURL builder) (_customizeRoute builder r) return $ _customizeRequest builder $ req { requestHeaders = ("Content-Type", "application/x-www-form-urlencoded") : requestHeaders req , requestBody = RequestBodyBS (dropQuestion $ queryString req)@@ -29,19 +29,22 @@ basicSend :: Builder -> Route -> Maybe Request basicSend builder r = do- req <- parseUrl $ Text.unpack $ routeURL (_baseURL builder) (_customizeRoute builder r)+ req <- parseUrlThrow $ Text.unpack $ routeURL (_baseURL builder) (_customizeRoute builder r) return $ _customizeRequest builder $ req { method = httpMethod r } instance Sendable Value where send builder r value = case httpMethod r of "POST" -> do- req <- parseUrl $ Text.unpack $ routeURL (_baseURL builder) (_customizeRoute builder r)+ req <- parseUrlThrow $ Text.unpack $ routeURL (_baseURL builder) (_customizeRoute builder r) return $ _customizeRequest builder $ req { requestBody = RequestBodyLBS (encode value) , requestHeaders = ("Content-Type", "application/json") : requestHeaders req , method = httpMethod r } _ -> Nothing++useToJSON :: ToJSON a => Builder -> Route -> a -> Maybe Request+useToJSON b r v = send b r (toJSON v) instance Sendable ByteString where send builder r bs =