The bert package

[Tags: bsd3, library]

Implements the BERT serialization and RPC protocols described at http://bert-rpc.org/.


[Skip to ReadMe]

Properties

Versions1.0, 1.1, 1.1.1, 1.1.2, 1.1.2.1, 1.2, 1.2.1, 1.2.1.1, 1.2.1.2, 1.2.2, 1.2.2.1, 1.2.2.2, 1.2.2.3, 1.2.2.4
Change logCHANGELOG.md
Dependenciesbase (==4.*), binary (>=0.5), binary-conduit (>=1.2), bytestring (>=0.9), conduit (>=1.0), containers (>=0.2), mtl (>=1.1), network (>=2.2), network-conduit (>=1.0), parsec (>=2.0), time (>=1.1), unix (>=2.0), void [details]
LicenseBSD3
Copyright(c) 2009-2011 marius a. eriksen; (c) 2013 Roman Cheplyaka
Authormarius a. eriksen, Roman Cheplyaka
MaintainerRoman Cheplyaka <roma@ro-che.info>
CategoryData
Home pagehttps://github.com/feuerbach/bert
Bug trackerhttps://github.com/feuerbach/bert/issues
Source repositoryhead: git clone git@github.com:feuerbach/bert.git
UploadedMon Nov 25 11:44:43 UTC 2013 by RomanCheplyaka
Downloads2276 total (113 in last 30 days)
Votes
0 []
StatusDocs available [build log]
Successful builds reported [all 2 reports]

Modules

[Index]

Downloads

Maintainers' corner

For package maintainers and hackage trustees

Readme for bert-1.2.1.2

BERT[-RPC] for Haskell

Originally written by marius a. eriksen (marius@monkey.org)

This is a BERT serializer/deserializer and BERT-RPC client and server for Haskell. BERT-RPC currently supports synchronous (call) requests.

The primitives provided are fairly elementary: for the client, call provides the capability to perform the RPC call, while the server's serve is provided with a dispatch function providing the dispatching logic for the server. Thus, one can imagine building higher level abstractions on top of these primitives.

Installation

It's a cabal package, so

$ cabal install bert

should do the trick.

BERT

import qualified Data.ByteString.Lazy.Char8 as C
import Data.BERT

Creating BERT terms is simple.

TupleTerm [BytelistTerm (C.pack "hello"), IntTerm 123]

Or by using the BERT typeclass.

showBERT $ ("hello", 123)

The BERT class can also read terms back.

Right ("hello", 123) = readBERT . showBERT $ ("hello", 123)

BERT-RPC client

import Data.BERT
import Network.BERT.Client

Create a transport to the server endpoint, and issue a (synchronous) call with it.

t <- tcpClient "localhost" 8080
r <- call t "calc" "add" ([123, 3000]::[Int])
case r of
  Right res -> print (res :: Int)
  Left _    -> putStrLn "error"

BERT-RPC server

import Data.BERT
import Network.BERT.Server

Create a transport from which to accept connections, and provide a dispatch function for incoming RPCs. The dispatch function is issued in a new thread for each incoming request.

main = do
  s <- tcpServer 8080
  serve t dispatch

dispatch "calc" "add" [IntTerm a, IntTerm b] = 
  return $ Success $ IntTerm (a + b)
dispatch "calc" _ _ =
  return NoSuchFunction
dispatch _ _ _ = 
  return NoSuchModule