diff --git a/rollbar-hs.cabal b/rollbar-hs.cabal index 9c9b5c5..d603867 100644 --- a/rollbar-hs.cabal +++ b/rollbar-hs.cabal @@ -51,15 +51,15 @@ library hs-source-dirs: src build-depends: - aeson >= 2.2 + aeson >=1.1 , base >=4.9 , bytestring >=0.10 , case-insensitive >=1.2 , hostname >=1.0 , http-client >=0.5 , http-conduit >=2.2 - , http-types >=0.9 - , network >=2.6 + , http-types >=0.8.6 + , network >=2.6.3 , text >=1.2 , time >=1.6 , unordered-containers >=0.2 @@ -80,14 +80,14 @@ test-suite doc-test test build-depends: QuickCheck >=2.9 - , aeson >=1.0 - , base >=4.9 - , bytestring >=0.10 - , case-insensitive >=1.2 + , aeson + , base + , bytestring + , case-insensitive , hashable , hspec >=2.4 , hspec-golden-aeson >=0.2 , rollbar-hs - , text >=1.2 - , unordered-containers >=0.2 + , text + , unordered-containers default-language: Haskell2010 diff --git a/src/Rollbar/Item.hs b/src/Rollbar/Item.hs index 1519bd5..3272ebd 100644 --- a/src/Rollbar/Item.hs +++ b/src/Rollbar/Item.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE NamedFieldPuns #-} @@ -197,10 +198,17 @@ data Item a headers } deriving (Eq, Generic, Show) +#if MIN_VERSION_aeson(2, 2, 0) itemKVs :: (KeyValue e kv, RemoveHeaders headers, ToJSON v) => Item v headers -> [kv] +#else +itemKVs + :: (KeyValue kv, RemoveHeaders headers, ToJSON v) + => Item v headers + -> [kv] +#endif itemKVs Item{accessToken, itemData} = [ "access_token" .= accessToken , "data" .= itemData diff --git a/src/Rollbar/Item/Body.hs b/src/Rollbar/Item/Body.hs index 89ba807..43bb976 100644 --- a/src/Rollbar/Item/Body.hs +++ b/src/Rollbar/Item/Body.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE NamedFieldPuns #-} @@ -33,7 +34,7 @@ import Data.Aeson , (.=) ) import Data.Aeson.Encoding (pair) -import Data.Aeson.Types (typeMismatch) +import Data.Aeson.Types (explicitParseField, typeMismatch) import Data.String (IsString) import GHC.Generics (Generic) @@ -52,16 +53,21 @@ data Body arbitrary } deriving (Eq, Generic, Show) +#if MIN_VERSION_aeson(2, 2, 0) bodyKVs :: (KeyValue e kv, ToJSON v) => Body v -> [kv] +#else +bodyKVs :: (KeyValue kv, ToJSON v) => Body v -> [kv] +#endif bodyKVs Message{messageBody, messageData} = [ "body" .= messageBody , "data" .= messageData ] instance FromJSON arbitrary => FromJSON (Body arbitrary) where - parseJSON (Object o') = do - o <- o' .: "message" - Message <$> o .: "body" <*> o .: "data" + parseJSON (Object o') = explicitParseField parseMessage o' "message" + where + parseMessage (Object o) = Message <$> o .: "body" <*> o .: "data" + parseMessage v = typeMismatch "Body arbitrary (message)" v parseJSON v = typeMismatch "Body arbitrary" v instance ToJSON arbitrary => ToJSON (Body arbitrary) where diff --git a/src/Rollbar/Item/MissingHeaders.hs b/src/Rollbar/Item/MissingHeaders.hs index b7f43a2..1e799e6 100644 --- a/src/Rollbar/Item/MissingHeaders.hs +++ b/src/Rollbar/Item/MissingHeaders.hs @@ -64,7 +64,11 @@ instance FromJSON (MissingHeaders headers) where instance RemoveHeaders headers => ToJSON (MissingHeaders headers) where toJSON = object . catMaybes . requestHeadersKVs . removeHeaders +#if MIN_VERSION_aeson(2, 2, 0) requestHeadersKVs :: forall e kv. KeyValue e kv => RequestHeaders -> [Maybe kv] +#else +requestHeadersKVs :: forall kv. KeyValue kv => RequestHeaders -> [Maybe kv] +#endif requestHeadersKVs = fmap go where go :: Header -> Maybe kv diff --git a/src/Rollbar/Item/Request.hs b/src/Rollbar/Item/Request.hs index 6f340b1..7ffb1ef 100644 --- a/src/Rollbar/Item/Request.hs +++ b/src/Rollbar/Item/Request.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE NamedFieldPuns #-} @@ -97,7 +98,11 @@ instance ToJSON Get where toJSON (Get q) = object . catMaybes . queryKVs $ q toEncoding (Get q) = pairs . mconcat . catMaybes . queryKVs $ q +#if MIN_VERSION_aeson(2, 2, 0) queryKVs :: forall e kv. KeyValue e kv => Query -> [Maybe kv] +#else +queryKVs :: forall kv. KeyValue kv => Query -> [Maybe kv] +#endif queryKVs = fmap go where go :: (BS.ByteString, Maybe BS.ByteString) -> Maybe kv @@ -150,7 +155,11 @@ instance ToJSON IP where toJSON (IP ip) = toJSON (show ip) toEncoding (IP ip) = toEncoding (show ip) +#if MIN_VERSION_aeson(2, 2, 0) requestKVs :: (KeyValue e kv, RemoveHeaders headers) => Request headers -> [kv] +#else +requestKVs :: (KeyValue kv, RemoveHeaders headers) => Request headers -> [kv] +#endif requestKVs Request{get, headers, method, queryString, rawBody, url, userIP} = [ "body" .= rawBody , "GET" .= get diff --git a/src/Rollbar/Item/Server.hs b/src/Rollbar/Item/Server.hs index 4efb959..0bff0b0 100644 --- a/src/Rollbar/Item/Server.hs +++ b/src/Rollbar/Item/Server.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE NamedFieldPuns #-} @@ -57,7 +58,11 @@ data Server } deriving (Eq, Generic, Show) +#if MIN_VERSION_aeson(2, 2, 0) serverKVs :: KeyValue e kv => Server -> [Maybe kv] +#else +serverKVs :: KeyValue kv => Server -> [Maybe kv] +#endif serverKVs Server{branch, host, root, serverCodeVersion} = [ ("host" .=) <$> host , ("root" .=) <$> root