From 78c1bdfb81930593ed9569311d0ca7533dd62585 Mon Sep 17 00:00:00 2001 From: mniip Date: Sat, 29 Nov 2025 13:06:37 +0100 Subject: [PATCH 1/3] Dependency updates aeson >=2.2 is needed because the KeyValue class changed signature base >=4.10 is implied by aeson >=2.2 http-types relaxed to >=0.8.6 because it builds fine network >=2.6.3 for tupleToHostAddress --- rollbar-hs.cabal | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/rollbar-hs.cabal b/rollbar-hs.cabal index 9c9b5c5..593a7c3 100644 --- a/rollbar-hs.cabal +++ b/rollbar-hs.cabal @@ -51,15 +51,15 @@ library hs-source-dirs: src build-depends: - aeson >= 2.2 - , base >=4.9 + aeson >=2.2 + , base >=4.10 , 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 From bbbd03ad3166295384600d97b72b06cb1936c36d Mon Sep 17 00:00:00 2001 From: mniip Date: Mon, 8 Dec 2025 01:59:43 +0100 Subject: [PATCH 2/3] Support both aeson <2.2 and >=2.2 --- rollbar-hs.cabal | 4 ++-- src/Rollbar/Item.hs | 8 ++++++++ src/Rollbar/Item/Body.hs | 5 +++++ src/Rollbar/Item/MissingHeaders.hs | 4 ++++ src/Rollbar/Item/Request.hs | 9 +++++++++ src/Rollbar/Item/Server.hs | 5 +++++ 6 files changed, 33 insertions(+), 2 deletions(-) diff --git a/rollbar-hs.cabal b/rollbar-hs.cabal index 593a7c3..f55ed62 100644 --- a/rollbar-hs.cabal +++ b/rollbar-hs.cabal @@ -51,8 +51,8 @@ library hs-source-dirs: src build-depends: - aeson >=2.2 - , base >=4.10 + aeson >=1.0 + , base >=4.9 , bytestring >=0.10 , case-insensitive >=1.2 , hostname >=1.0 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..c2d74dc 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 #-} @@ -52,7 +53,11 @@ 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 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 From 9069ae6e4d103d32b4ac120426a94dd3f4409747 Mon Sep 17 00:00:00 2001 From: mniip Date: Mon, 8 Dec 2025 02:08:53 +0100 Subject: [PATCH 3/3] Support aeson 2.0.0.0 too --- rollbar-hs.cabal | 2 +- src/Rollbar/Item/Body.hs | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/rollbar-hs.cabal b/rollbar-hs.cabal index f55ed62..d603867 100644 --- a/rollbar-hs.cabal +++ b/rollbar-hs.cabal @@ -51,7 +51,7 @@ library hs-source-dirs: src build-depends: - aeson >=1.0 + aeson >=1.1 , base >=4.9 , bytestring >=0.10 , case-insensitive >=1.2 diff --git a/src/Rollbar/Item/Body.hs b/src/Rollbar/Item/Body.hs index c2d74dc..43bb976 100644 --- a/src/Rollbar/Item/Body.hs +++ b/src/Rollbar/Item/Body.hs @@ -34,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) @@ -64,9 +64,10 @@ bodyKVs Message{messageBody, 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