diff --git a/cabal.project b/cabal.project new file mode 100644 index 0000000..14696d8 --- /dev/null +++ b/cabal.project @@ -0,0 +1,19 @@ +packages: ./ + +package msgpack + tests: False + +package msgpack-aeson + tests: False + +source-repository-package + type: git + location: https://github.com/symbiont-sam-halliday/msgpack-haskell.git + tag: bff614bc2dc22e5606c19c140a71fc0ebe7f4580 + subdir: msgpack + +source-repository-package + type: git + location: https://github.com/symbiont-sam-halliday/msgpack-haskell.git + tag: bff614bc2dc22e5606c19c140a71fc0ebe7f4580 + subdir: msgpack-aeson diff --git a/datadog-tracing.cabal b/datadog-tracing.cabal index 9ef6f42..d5af6b3 100644 --- a/datadog-tracing.cabal +++ b/datadog-tracing.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: datadog-tracing -version: 1.5.1 +version: 1.6.0 synopsis: Datadog tracing client and mock agent. license: BSD-3-Clause license-file: LICENSE @@ -31,14 +31,14 @@ flag manual default: False common deps - build-depends: , base ^>= 4.11.1.0 || ^>= 4.12.0.0 - , bytestring ^>= 0.10.8.2 - , containers ^>= 0.5.11.0 || ^>= 0.6.0.1 - , jaeger-flamegraph ^>= 1.3.0 - , mtl ^>= 2.2.2 - , text ^>= 1.2.3.1 - , aeson ^>= 1.4.1.0 - , servant ^>= 0.15 + build-depends: , base ^>= 4.11.1.0 || ^>= 4.12 + , bytestring ^>= 0.10.8.2 + , containers ^>= 0.5.11.0 || ^>= 0.6.0.1 + , jaeger-flamegraph ^>= 1.3 + , mtl ^>= 2.2.2 + , text ^>= 1.2.3.1 + , aeson ^>= 1.4.1 + , servant ^>= 0.16 ghc-options: -Wall -Werror=missing-home-modules default-language: Haskell2010 @@ -49,31 +49,31 @@ library exposed-modules: Datadog.Agent , Datadog.Client , Datadog.Jaeger - other-modules: Data.MessagePack.Aeson - , Servant.MsgPack - build-depends: , ffunctor ^>= 1.1.0 - , generic-random ^>= 1.2.0.0 - , http-media ^>= 0.7.1.3 - , msgpack ^>= 1.0.1.0 - , refined ^>= 0.2.3.0 || ^>= 0.4 - , prettyprinter ^>= 1.2.1 - , servant-client ^>= 0.15 - , scientific ^>= 0.3.6.2 - , time ^>= 1.8.0.2 - , unordered-containers ^>= 0.2.9.0 - , vector ^>= 0.12.0.2 - , QuickCheck ^>= 2.11.3 || ^>= 2.12.6.1 - , quickcheck-text ^>= 0.1.2.1 + other-modules: Servant.MsgPack + build-depends: , ffunctor ^>= 1.1.0.0 || ^>= 1.2 + , generic-random ^>= 1.2 + , http-media ^>= 0.7.1.3 || ^>= 0.8 + , msgpack ^>= 1.1 + , msgpack-aeson ^>= 0.2.0.0 + , refined ^>= 0.2.3.0 || ^>= 0.4 + , prettyprinter ^>= 1.2.1 + , servant-client ^>= 0.16 + , scientific ^>= 0.3.6.2 + , time ^>= 1.8.0.2 + , unordered-containers ^>= 0.2.9 + , vector ^>= 0.12.0.2 + , QuickCheck ^>= 2.11.3 || ^>= 2.12.6.1 || ^>= 2.13.2 + , quickcheck-text ^>= 0.1.2.1 executable datadog-agent import: deps hs-source-dirs: exe main-is: Main.hs build-depends: , datadog-tracing - , data-default ^>= 0.7.1.1 - , servant-server ^>= 0.15 - , wai-extra ^>= 3.0.24 || ^>= 3.0.25 - , warp ^>= 3.2.25 + , data-default ^>= 0.7.1.1 + , servant-server ^>= 0.16 + , wai-extra ^>= 3.0.24.0 || ^>= 3.0.25 + , warp ^>= 3.2.25 ghc-options: -threaded executable manual-test @@ -94,8 +94,8 @@ test-suite tests main-is: Driver.hs other-modules: Datadog.AgentTest build-depends: , datadog-tracing - , hspec-golden-aeson ^>= 0.7.0.0 - , tasty ^>= 1.1.0.4 + , hspec-golden-aeson ^>= 0.7 + , tasty ^>= 1.1.0.4 || ^>= 1.2 , tasty-hspec ^>= 1.1.5.1 build-tool-depends: tasty-discover:tasty-discover ^>= 4.2.1 ghc-options: -threaded diff --git a/library/Data/MessagePack/Aeson.hs b/library/Data/MessagePack/Aeson.hs deleted file mode 100644 index 1d99cf6..0000000 --- a/library/Data/MessagePack/Aeson.hs +++ /dev/null @@ -1,58 +0,0 @@ --- | This file is copied and pasted from --- http://hackage.haskell.org/package/msgpack-aeson-0.1.0.0/docs/src/Data-MessagePack-Aeson.html#toAeson --- with only minor changes to use the data-msgpack fork (mostly changing Vector to list). - -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE TypeApplications #-} - --- | Aeson bridge for MessagePack --- --- Copyright: (c) 2015 Hideyuki Tanaka -module Data.MessagePack.Aeson where - -import Control.Arrow -import Data.Aeson as A -import Data.ByteString.Lazy (ByteString) -import qualified Data.HashMap.Strict as HM -import Data.MessagePack as MP -import Data.Scientific -import qualified Data.Text.Encoding as T -import qualified Data.Vector as V -import Data.Word (Word64) - -toAeson :: MP.Object -> A.Result Value -toAeson = \case - ObjectNil -> pure Null - ObjectBool b -> pure . Bool $ b - ObjectInt n -> - let w64 :: Word64 = fromIntegral n -- WARNING: silent wraparound biased to unsigned integers, fixed in next msgpack - in pure . Number . fromIntegral $ w64 - ObjectFloat f -> pure . Number $ realToFrac f - ObjectDouble d -> pure . Number $ realToFrac d - ObjectStr t -> pure . String $ t - ObjectBin b -> String <$> either (fail . show) pure (T.decodeUtf8' b) - ObjectArray v -> Array <$> V.mapM toAeson v - ObjectMap m -> - A.Object . HM.fromList . V.toList - <$> V.mapM (\(k, v) -> (,) <$> from k <*> toAeson v) m - where from = maybe (fail "bad object") pure . MP.fromObject - ObjectExt _ _ -> fail "ObjectExt is not supported" - -fromAeson :: Value -> MP.Object -fromAeson = \case - Null -> ObjectNil - Bool b -> ObjectBool b - Number s -> - case floatingOrInteger @Double @Integer s of - Left f -> ObjectDouble f - Right n -> ObjectInt (fromInteger n) -- WARNING: silent wraparound, fixed in next msgpack - String t -> ObjectStr t - Array v -> ObjectArray $ V.map fromAeson v - A.Object o -> ObjectMap $ V.fromList $ map (toObject *** fromAeson) $ HM.toList o - -packToJSON :: ToJSON a => a -> ByteString -packToJSON = pack . fromAeson . toJSON - -unpackFromJSON :: FromJSON a => ByteString -> Result a -unpackFromJSON b = fromJSON =<< toAeson =<< maybe (fail "msgpack") pure (unpack b) diff --git a/library/Datadog/Client.hs b/library/Datadog/Client.hs index f871cd1..ab32b23 100644 --- a/library/Datadog/Client.hs +++ b/library/Datadog/Client.hs @@ -47,7 +47,7 @@ import Data.Typeable (Proxy (..), Typeable, typeOf) import Data.Word (Word64) import Refined hiding (NonEmpty) import qualified Refined -import Servant.Client (ClientEnv, ClientM, ServantError, +import Servant.Client (ClientEnv, ClientM, ClientError, client, runClientM) import qualified Datadog.Agent as API @@ -62,13 +62,13 @@ newtype Agent m = Agent -- users to handle errors at the point of use. -- -- See https://discourse.haskell.org/t/local-capabilities-with-mtl/231 -type AgentT m = Agent (ExceptT ServantError m) +type AgentT m = Agent (ExceptT ClientError m) instance FFunctor Agent where ffmap nt (Agent p1) = Agent (nt . p1) -- | An Agent (or AgentT) implemented by Servant. -newServantAgent :: (MonadIO m, MonadError ServantError m) => ClientEnv -> Agent m +newServantAgent :: (MonadIO m, MonadError ClientError m) => ClientEnv -> Agent m newServantAgent env = ffmap (liftClientM env) (Agent traces) -- | A fire-and-forget Agent implemented by Servant. @@ -173,7 +173,7 @@ validate' t p a = throwRefineOtherException (typeOf t) ("failed predicate: " <> (viaShow a)) -- | Converts ClientM signatures into MTL, pushing errors into the stack. -liftClientM :: (MonadIO m, MonadError ServantError m) +liftClientM :: (MonadIO m, MonadError ClientError m) => ClientEnv -> ClientM a -> m a diff --git a/library/Servant/MsgPack.hs b/library/Servant/MsgPack.hs index ab4df57..fdcb18e 100644 --- a/library/Servant/MsgPack.hs +++ b/library/Servant/MsgPack.hs @@ -23,9 +23,9 @@ instance Accept MsgPack where , "application" // "vnd.msgpack"] instance ToJSON a => MimeRender MsgPack a where - mimeRender _ = packToJSON + mimeRender _ = packAeson instance FromJSON a => MimeUnrender MsgPack a where - mimeUnrender _ b = case unpackFromJSON b of + mimeUnrender _ b = case unpackAeson b of Error str -> Left str Success a -> Right a diff --git a/stack-8.4.4.yaml b/stack-8.4.4.yaml index b5be6ba..f3aae09 100644 --- a/stack-8.4.4.yaml +++ b/stack-8.4.4.yaml @@ -11,19 +11,24 @@ extra-deps: - hspec-core-2.6.1 - hspec-discover-2.6.1 - http-api-data-0.4 + - int-cast-0.2.0.0 - jaeger-flamegraph-1.3.0 - - msgpack-1.0.1.0 - - network-2.8.0.1 - # - network-3.0.1.1 # re-add when bumping to servant-0.16 + - network-3.0.1.1 # re-add when bumping to servant-0.16 - QuickCheck-2.12.6.1 - semigroupoids-5.3.2 - - servant-0.15 - - servant-client-0.15 - - servant-client-core-0.15 - - servant-server-0.15 - # - simple-sendfile-0.2.28 # re-add when bumping to servant-0.16 + - servant-0.16 + - servant-client-0.16 + - servant-client-core-0.16 + - servant-server-0.16 + - simple-sendfile-0.2.28 # re-add when bumping to servant-0.16 - sop-core-0.4.0.0 # remove when bumping to servant-0.16 - splitmix-0.0.2 - tagged-0.8.6 - # - wai-extra-3.0.26 # re-add when bumping to servant-0.16 - # - warp-3.2.27 # re-add when bumping to servant-0.16 + - wai-extra-3.0.26 # re-add when bumping to servant-0.16 + - warp-3.2.27 # re-add when bumping to servant-0.16 + + - git: https://github.com/symbiont-sam-halliday/msgpack-haskell.git + commit: bff614bc2dc22e5606c19c140a71fc0ebe7f4580 + subdirs: + - msgpack + - msgpack-aeson diff --git a/stack.yaml b/stack.yaml index 71efaf7..78cdda1 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,13 +1,15 @@ -resolver: lts-13.22 +resolver: lts-14.0 packages: - . extra-deps: - - ffunctor-1.1.100 - - jaeger-flamegraph-1.3.0 - - msgpack-1.0.1.0 - - refined-0.4.1 - - servant-0.15 - - servant-server-0.15 - - servant-client-0.15 - - servant-client-core-0.15 - - tasty-1.1.0.4 + - ffunctor-1.2.0 + - jaeger-flamegraph-1.3.2 + - lens-labels-0.3.0.1 + - QuickCheck-2.12.6.1 + - refined-0.4.2.2 + + - git: https://github.com/symbiont-sam-halliday/msgpack-haskell.git + commit: bff614bc2dc22e5606c19c140a71fc0ebe7f4580 + subdirs: + - msgpack + - msgpack-aeson