colorless 2.2.13 → 2.2.14
raw patch · 5 files changed
+31/−16 lines, 5 filesdep +safe-exceptionsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: safe-exceptions
API changes (from Hackage documentation)
- Colorless.Client.Exchange: instance (Colorless.Ast.ToAst meta, Colorless.Types.HasType meta, Colorless.Ast.ToAst a, Colorless.Types.HasType a) => Data.Aeson.Types.ToJSON.ToJSON (Colorless.Client.Exchange.Request meta a)
- Colorless.Client.Exchange: instance (Data.Aeson.Types.FromJSON.FromJSON err, Colorless.Types.HasType err) => Data.Aeson.Types.FromJSON.FromJSON (Colorless.Client.Exchange.ResponseError err)
- Colorless.Client.Exchange: instance (Data.Aeson.Types.FromJSON.FromJSON err, Colorless.Types.HasType err, Data.Aeson.Types.FromJSON.FromJSON a, Colorless.Types.HasType a) => Data.Aeson.Types.FromJSON.FromJSON (Colorless.Client.Exchange.Response err a)
- Colorless.Client.Exchange: instance (Data.Aeson.Types.ToJSON.ToJSON err, Data.Aeson.Types.ToJSON.ToJSON a) => Data.Aeson.Types.ToJSON.ToJSON (Colorless.Client.Exchange.Response err a)
- Colorless.Client.Exchange: instance Data.Aeson.Types.ToJSON.ToJSON err => Data.Aeson.Types.ToJSON.ToJSON (Colorless.Client.Exchange.ResponseError err)
- Colorless.ServiceThrower: instance Colorless.ServiceThrower.ServiceThrower GHC.Types.IO
- Colorless.ServiceThrower: instance GHC.Base.Monad m => Colorless.ServiceThrower.ServiceThrower (Control.Monad.Trans.Except.ExceptT Colorless.Server.Exchange.Response m)
+ Colorless.Client.Exchange: instance (Colorless.Val.FromVal err, Colorless.Types.HasType err) => Data.Aeson.Types.FromJSON.FromJSON (Colorless.Client.Exchange.ResponseError err)
+ Colorless.Client.Exchange: instance (Colorless.Val.FromVal err, Colorless.Types.HasType err, Colorless.Val.FromVal a, Colorless.Types.HasType a) => Data.Aeson.Types.FromJSON.FromJSON (Colorless.Client.Exchange.Response err a)
+ Colorless.Client.Exchange: instance (Colorless.Val.ToVal err, Colorless.Types.HasType err, Colorless.Val.ToVal a, Colorless.Types.HasType a) => Data.Aeson.Types.ToJSON.ToJSON (Colorless.Client.Exchange.Response err a)
+ Colorless.Client.Exchange: instance (Colorless.Val.ToVal meta, Colorless.Types.HasType meta, Colorless.Ast.ToAst a, Colorless.Types.HasType a) => Data.Aeson.Types.ToJSON.ToJSON (Colorless.Client.Exchange.Request meta a)
+ Colorless.Client.Exchange: instance Colorless.Val.ToVal err => Data.Aeson.Types.ToJSON.ToJSON (Colorless.Client.Exchange.ResponseError err)
+ Colorless.ServiceThrower: instance Control.Monad.Catch.MonadThrow m => Colorless.ServiceThrower.ServiceThrower (Control.Monad.Trans.Except.ExceptT Colorless.Server.Exchange.Response m)
+ Colorless.ServiceThrower: instance GHC.Exception.Exception Data.Aeson.Types.Internal.Value
- Colorless.ServiceThrower: class Monad m => ServiceThrower m
+ Colorless.ServiceThrower: class MonadThrow m => ServiceThrower m where serviceThrow err = throw err
Files
- colorless.cabal +2/−1
- library/Colorless/Client/Exchange.hs +19/−10
- library/Colorless/Imports.hs +2/−0
- library/Colorless/ServiceThrower.hs +6/−4
- package.yaml +2/−1
colorless.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack name: colorless-version: 2.2.13+version: 2.2.14 synopsis: Colorless description: Colorless category: Web@@ -35,6 +35,7 @@ , mtl , random , scientific+ , safe-exceptions , text , text-conversions , unordered-containers
library/Colorless/Client/Exchange.hs view
@@ -10,6 +10,7 @@ import Colorless.Types (RuntimeError, HasType(..), Version(..)) import Colorless.Ast (ToAst(..))+import Colorless.Val (ToVal(..), FromVal(..)) import Colorless.Client.Expr (Expr, exprJSON) data Request meta a = Request@@ -19,11 +20,11 @@ , query :: Expr a } -instance (ToAst meta, HasType meta, ToAst a, HasType a) => ToJSON (Request meta a) where+instance (ToVal meta, HasType meta, ToAst a, HasType a) => ToJSON (Request meta a) where toJSON Request{colorless, version, meta, query} = object [ "colorless" .= colorless , "version" .= version- , "meta" .= toAst meta+ , "meta" .= toVal meta , "query" .= exprJSON query ] @@ -32,18 +33,22 @@ | ResponseError'Runtime RuntimeError deriving (Eq, Show) -instance (FromJSON err, HasType err) => FromJSON (ResponseError err) where+instance (FromVal err, HasType err) => FromJSON (ResponseError err) where parseJSON (Object o) = do tag <- o .: "tag" case tag :: Text of- "Service" -> ResponseError'Service <$> o .: "service"+ "Service" -> do+ m <- o .: "service"+ case fromVal m of+ Nothing -> mzero+ Just v -> return $ ResponseError'Service v "Runtime" -> ResponseError'Runtime <$> o .: "runtime" _ -> mzero parseJSON _ = mzero -instance ToJSON err => ToJSON (ResponseError err) where+instance ToVal err => ToJSON (ResponseError err) where toJSON = \case- ResponseError'Service m -> object [ "tag" .= String "Service", "service" .= m ]+ ResponseError'Service m -> object [ "tag" .= String "Service", "service" .= toVal m ] ResponseError'Runtime m -> object [ "tag" .= String "Runtime", "runtime" .= m ] data Response err a@@ -51,15 +56,19 @@ | Response'Success a deriving (Show, Eq) -instance (FromJSON err, HasType err, FromJSON a, HasType a) => FromJSON (Response err a) where+instance (FromVal err, HasType err, FromVal a, HasType a) => FromJSON (Response err a) where parseJSON (Object o) = do tag <- o .: "tag" case tag :: Text of- "Success" -> Response'Success <$> o .: "success"+ "Success" -> do+ m <- o .: "success"+ case fromVal m of+ Nothing -> mzero+ Just v -> return $ Response'Success v "Error" -> Response'Error <$> o .: "error" _ -> mzero parseJSON _ = mzero -instance (ToJSON err, ToJSON a) => ToJSON (Response err a) where+instance (ToVal err, HasType err, ToVal a, HasType a) => ToJSON (Response err a) where toJSON (Response'Error m) = object [ "tag" .= String "Error", "error" .= m ]- toJSON (Response'Success m) = object [ "tag" .= String "Success", "success" .= m ]+ toJSON (Response'Success m) = object [ "tag" .= String "Success", "success" .= toVal m ]
library/Colorless/Imports.hs view
@@ -5,6 +5,7 @@ , module Data.Text , module Data.Text.Conversions , module Data.ByteString.Lazy.Char8+ , module Control.Exception.Safe ) where import Data.Map (Map, fromList, toList, empty, size)@@ -13,3 +14,4 @@ import Data.ByteString.Lazy.Char8 (ByteString) import Data.Text (Text) import Data.Text.Conversions (ToText(..), FromText(..))+import Control.Exception.Safe (MonadThrow, MonadCatch, catch)
library/Colorless/ServiceThrower.hs view
@@ -1,17 +1,19 @@+{-# OPTIONS_GHC -fno-warn-orphans #-} module Colorless.ServiceThrower ( ServiceThrower(..) ) where +import Control.Exception.Safe import Control.Monad.Except import Data.Aeson import qualified Colorless.Server.Exchange as Server -class Monad m => ServiceThrower m where+class MonadThrow m => ServiceThrower m where serviceThrow :: Value -> m a+ serviceThrow err = throw err -instance ServiceThrower IO where- serviceThrow err = error $ "Service error - " ++ show err+instance Exception Value -instance Monad m => ServiceThrower (ExceptT Server.Response m) where+instance MonadThrow m => ServiceThrower (ExceptT Server.Response m) where serviceThrow = throwError . Server.Response'Error . Server.ResponseError'Service
package.yaml view
@@ -1,5 +1,5 @@ name: colorless-version: '2.2.13'+version: '2.2.14' category: Web synopsis: Colorless description: Colorless@@ -41,6 +41,7 @@ - mtl - random - scientific+ - safe-exceptions - text - text-conversions - unordered-containers