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 +0/−156
- json-rpc.cabal +1/−6
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