From 4ec7968d3a46f52aeb0a01148fa0b8e644951955 Mon Sep 17 00:00:00 2001 From: ncaq Date: Sat, 18 Feb 2023 02:54:15 +0900 Subject: [PATCH] fix(msgpack-aeson)!: support aeson version 2 --- cabal.project | 5 ++++ msgpack-aeson/msgpack-aeson.cabal | 9 ++++--- msgpack-aeson/src/Data/MessagePack/Aeson.hs | 26 +++++++++++++-------- msgpack-rpc/msgpack-rpc.cabal | 13 +++++------ msgpack/msgpack.cabal | 8 +++---- 5 files changed, 35 insertions(+), 26 deletions(-) diff --git a/cabal.project b/cabal.project index dc73f9d..638c4b2 100644 --- a/cabal.project +++ b/cabal.project @@ -6,3 +6,8 @@ packages: msgpack-rpc -- msgpack-idl -- msgpack-idl-web + +source-repository-package + type: git + location: https://github.com/input-output-hk/int-cast + tag: 20cc3a9 diff --git a/msgpack-aeson/msgpack-aeson.cabal b/msgpack-aeson/msgpack-aeson.cabal index 063ebd4..fab90cb 100644 --- a/msgpack-aeson/msgpack-aeson.cabal +++ b/msgpack-aeson/msgpack-aeson.cabal @@ -23,11 +23,10 @@ library hs-source-dirs: src exposed-modules: Data.MessagePack.Aeson - build-depends: base >= 4.7 && < 4.14 - , aeson >= 0.8.0.2 && < 0.12 - || >= 1.0 && < 1.5 - , bytestring >= 0.10.4 && < 0.11 - , msgpack >= 1.1.0 && < 1.2 + build-depends: base >= 4.7 && < 4.18 + , aeson >= 2.0.0.0 && < 2.2.0.0 + , bytestring >= 0.10.4 && < 0.12 + , msgpack >= 1.0.0 && < 1.2 , scientific >= 0.3.2 && < 0.4 , text >= 1.2.3 && < 1.3 , unordered-containers >= 0.2.5 && < 0.3 diff --git a/msgpack-aeson/src/Data/MessagePack/Aeson.hs b/msgpack-aeson/src/Data/MessagePack/Aeson.hs index d97ecc1..d7b5855 100644 --- a/msgpack-aeson/src/Data/MessagePack/Aeson.hs +++ b/msgpack-aeson/src/Data/MessagePack/Aeson.hs @@ -24,18 +24,19 @@ import Control.Applicative import Control.Arrow import Control.DeepSeq import Control.Exception -import Data.Aeson as A -import qualified Data.ByteString.Lazy as L (ByteString) +import Data.Aeson as A +import qualified Data.Aeson.Key as K +import qualified Data.Aeson.KeyMap as KM +import qualified Data.ByteString.Lazy as L (ByteString) import Data.Data -import qualified Data.HashMap.Strict as HM import Data.Int import Data.Maybe -import Data.MessagePack as MP +import Data.MessagePack as MP import Data.MessagePack.Integer import Data.Scientific -import qualified Data.Text.Encoding as T -import Data.Traversable (traverse) -import qualified Data.Vector as V +import qualified Data.Text.Encoding as T +import Data.Traversable (traverse) +import qualified Data.Vector as V import Data.Word -- | Convert 'MP.Object' to JSON 'Value' @@ -50,7 +51,7 @@ toAeson = \case ObjectBin b -> fail $ "ObjectBin is not supported by JSON" ObjectArray v -> Array <$> V.mapM toAeson v ObjectMap m -> - A.Object . HM.fromList . V.toList + A.Object . KM.fromList . V.toList <$> V.mapM (\(k, v) -> (,) <$> from k <*> toAeson v) m where from = mpResult fail pure . MP.fromObject ObjectExt _ _ -> fail "ObjectExt is not supported by JSON" @@ -68,9 +69,9 @@ fromAeson = \case Right _ -> fail "number out of bounds" String t -> pure $ ObjectStr t Array v -> ObjectArray <$> traverse fromAeson v - A.Object o -> (ObjectMap . V.fromList) <$> traverse fromEntry (HM.toList o) + A.Object km -> ObjectMap . V.fromList <$> traverse fromEntry (KM.toList km) where - fromEntry (k, v) = (\a -> (ObjectStr k, a)) <$> fromAeson v + fromEntry (k, v) = (\a -> (ObjectStr (K.toText k), a)) <$> fromAeson v -- Helpers to piggyback off a JSON encoder / decoder when creating a MessagePack -- instance. @@ -99,6 +100,11 @@ instance (FromJSON a, ToJSON a) => MessagePack (AsMessagePack a) where fromObject o = AsMessagePack <$> (aResult fail pure (fromJSON =<< toAeson o)) toObject = unsafeViaToJSON . getAsMessagePack +instance MessagePack K.Key where + toObject = ObjectStr . K.toText + toBinary = MP.putStr . K.toText + fromObject = withStr "Text" (pure . K.fromText) + -- | Wrapper for using MessagePack values as Aeson value. newtype AsAeson a = AsAeson { getAsAeson :: a } deriving (Eq, Ord, Show, Read, Functor, Data, Typeable, NFData) diff --git a/msgpack-rpc/msgpack-rpc.cabal b/msgpack-rpc/msgpack-rpc.cabal index 0acf909..b0baf94 100644 --- a/msgpack-rpc/msgpack-rpc.cabal +++ b/msgpack-rpc/msgpack-rpc.cabal @@ -26,16 +26,15 @@ library exposed-modules: Network.MessagePack.Server Network.MessagePack.Client - build-depends: base >= 4.5 && < 4.13 - , bytestring >= 0.10.4 && < 0.11 + build-depends: base >= 4.5 && < 4.18 + , bytestring >= 0.10.4 && < 0.12 , text >= 1.2.3 && < 1.3 - , network >= 2.6 && < 2.9 - || >= 3.0 && < 3.1 + , network >= 3.0 && < 3.2 , mtl >= 2.2.1 && < 2.3 , monad-control >= 1.0.0.0 && < 1.1 - , conduit >= 1.2.3.1 && < 1.3 - , conduit-extra >= 1.1.3.4 && < 1.3 - , binary-conduit >= 1.2.3 && < 1.3 + , conduit >= 1.2.3.1 && < 1.4 + , conduit-extra >= 1.1.3.4 && < 1.4 + , binary-conduit >= 1.2.3 && < 1.4 , exceptions >= 0.8 && < 0.11 , binary >= 0.7.1 && < 0.9 , msgpack >= 1.1.0 && < 1.2 diff --git a/msgpack/msgpack.cabal b/msgpack/msgpack.cabal index 9283e9e..c4c9c2c 100644 --- a/msgpack/msgpack.cabal +++ b/msgpack/msgpack.cabal @@ -71,9 +71,9 @@ library Compat.Binary Compat.Prelude - build-depends: base >= 4.7 && < 4.14 + build-depends: base >= 4.7 && < 4.17 , mtl >= 2.2.1 && < 2.3 - , bytestring >= 0.10.4 && < 0.11 + , bytestring >= 0.10.4 && < 0.12 , text >= 1.2.3 && < 1.3 , containers >= 0.5.5 && < 0.7 , unordered-containers >= 0.2.5 && < 0.3 @@ -117,8 +117,8 @@ test-suite msgpack-tests -- test-specific dependencies , async == 2.2.* , filepath == 1.3.* || == 1.4.* - , HsYAML >= 0.1.1 && < 0.2 + , HsYAML == 0.2.* , tasty == 1.2.* , tasty-quickcheck == 0.10.* , tasty-hunit == 0.10.* - , QuickCheck == 2.13.* + , QuickCheck == 2.14.*