Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(msgpack-aeson)!: support aeson version 2 #85

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -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
9 changes: 4 additions & 5 deletions msgpack-aeson/msgpack-aeson.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
26 changes: 16 additions & 10 deletions msgpack-aeson/src/Data/MessagePack/Aeson.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -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"
Expand All @@ -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.
Expand Down Expand Up @@ -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)
Expand Down
13 changes: 6 additions & 7 deletions msgpack-rpc/msgpack-rpc.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions msgpack/msgpack.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.*