packages feed

json-rpc 0.7.1.0 → 0.7.1.1

raw patch · 2 files changed

+1/−162 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

README.md view
@@ -17,159 +17,3 @@  [Examples](https://github.com/xenog/json-rpc/tree/master/examples) --Time Server Example-===================--```haskell-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TemplateHaskell #-}-import Control.Monad-import Control.Monad.Trans-import Control.Monad.Logger-import Data.Aeson.Types-import Data.Conduit.Network-import qualified Data.Foldable as F-import Data.Maybe-import qualified Data.Text as T-import Data.Time.Clock-import Data.Time.Format-import Network.JsonRpc-import System.Locale--data Req = TimeReq | Ping deriving (Show, Eq)--instance FromRequest Req where-    parseParams "time" = Just $ const $ return TimeReq-    parseParams "ping" = Just $ const $ return Ping-    parseParams _      = Nothing--instance ToRequest Req where-    requestMethod TimeReq = "time"-    requestMethod Ping    = "ping"-    requestIsNotif        = const False--instance ToJSON Req where-    toJSON = const emptyArray--data Res = Time { getTime :: UTCTime } | Pong deriving (Show, Eq)--instance FromResponse Res where-    parseResult "time" = Just $ withText "time" $ \t ->-        case parseTime defaultTimeLocale "%c" $ T.unpack t of-            Just t' -> return $ Time t'-            Nothing -> mzero-    parseResult "ping" = Just $ const $ return Pong-    parseResult _ = Nothing--instance ToJSON Res where-    toJSON (Time t) = toJSON $ formatTime defaultTimeLocale "%c" t-    toJSON Pong     = emptyArray--respond :: MonadLoggerIO m => Respond Req m Res-respond TimeReq = liftM (Right . Time) $ liftIO getCurrentTime-respond Ping    = return $ Right Pong--main :: IO ()-main = runStderrLoggingT $ do-    let ss = serverSettings 31337 "::1"-    jsonRpcTcpServer V2 False ss srv--srv :: MonadLoggerIO m => JsonRpcT m ()-srv = do-    $(logDebug) "listening for new request"-    qM <- receiveBatchRequest-    case qM of-        Nothing -> do-            $(logDebug) "closed request channel, exting"-            return ()-        Just (SingleRequest q) -> do-            $(logDebug) "got request"-            rM <- buildResponse respond q-            F.forM_ rM sendResponse-            srv-        Just (BatchRequest qs) -> do-            $(logDebug) "got request batch"-            rs <- catMaybes `liftM` forM qs (buildResponse respond)-            sendBatchResponse $ BatchResponse rs-            srv-```---Time Client Example-===================--```haskell-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE OverloadedStrings #-}-import Control.Concurrent-import Control.Monad-import Control.Monad.Trans-import Control.Monad.Logger-import Data.Aeson-import Data.Aeson.Types hiding (Error)-import Data.Conduit.Network-import qualified Data.Text as T-import Data.Time.Clock-import Data.Time.Format-import Network.JsonRpc-import System.Locale--data Req = TimeReq | Ping deriving (Show, Eq)--instance FromRequest Req where-    parseParams "time" = Just $ const $ return TimeReq-    parseParams "ping" = Just $ const $ return Ping-    parseParams _      = Nothing--instance ToRequest Req where-    requestMethod TimeReq = "time"-    requestMethod Ping    = "ping"-    requestIsNotif        = const False--instance ToJSON Req where-    toJSON = const emptyArray--data Res = Time { getTime :: UTCTime } | Pong deriving (Show, Eq)--instance FromResponse Res where-    parseResult "time" = Just $ withText "time" $ \t ->-        case parseTime defaultTimeLocale "%c" $ T.unpack t of-            Just t' -> return $ Time t'-            Nothing -> mzero-    parseResult "ping" = Just $ const $ return Pong-    parseResult _ = Nothing--instance ToJSON Res where-    toJSON (Time t) = toJSON $ formatTime defaultTimeLocale "%c" t-    toJSON Pong     = emptyArray--handleResponse :: Maybe (Either ErrorObj Res) -> Res-handleResponse t =-    case t of-        Nothing -> error "could not receive or parse response"-        Just (Left e) -> error $ fromError e-        Just (Right r) -> r--req :: MonadLoggerIO m => JsonRpcT m Res-req = do-    tEM <- sendRequest TimeReq-    $(logDebug) "sending time request"-    return $ handleResponse tEM--reqBatch :: MonadLoggerIO m => JsonRpcT m [Res]-reqBatch = do-    $(logDebug) "sending pings"-    tEMs <- sendBatchRequest $ replicate 2 Ping-    return $ map handleResponse tEMs--main :: IO ()-main = runStderrLoggingT $-    jsonRpcTcpClient V2 True (clientSettings 31337 "::1") $ do-        $(logDebug) "sending two time requests one second apart"-        replicateM_ 2 $ do-            req >>= $(logDebug) . T.pack . ("response: "++) . show-            liftIO (threadDelay 1000000)-        $(logDebug) "sending two pings in a batch"-        reqBatch >>= $(logDebug) . T.pack . ("response: "++) . show-```
json-rpc.cabal view
@@ -1,5 +1,5 @@ name:                   json-rpc-version:                0.7.1.0+version:                0.7.1.1 synopsis:               Fully-featured JSON-RPC 2.0 library description:   This JSON-RPC library is fully-compatible with JSON-RPC 2.0 and 1.0. It@@ -20,11 +20,6 @@ source-repository head   type:                 git   location:             https://github.com/xenog/json-rpc.git--source-repository this-  type:                 git-  location:             https://github.com/xenog/json-rpc.git-  tag:                  0.7.1.0  library   exposed-modules:      Network.JsonRpc