eventstore: EventStore TCP Client

[ bsd3, database, library ] [ Propose Tags ]

EventStore TCP Client https://eventstore.org


[Skip to Readme]

Modules

[Index] [Quick Jump]

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.0.1, 0.1.1.0, 0.1.2.0, 0.2.0.0, 0.2.0.1, 0.3.0.0, 0.3.1.0, 0.4.0.0, 0.5.0.0, 0.5.0.1, 0.6.0.0, 0.6.0.1, 0.7.0.0, 0.7.0.1, 0.7.1.0, 0.7.2.0, 0.7.2.1, 0.8.0.0, 0.9.0.0, 0.9.1.0, 0.9.1.1, 0.9.1.2, 0.9.1.3, 0.10.0.0, 0.10.0.1, 0.10.0.2, 0.11.0.0, 0.12.0.0, 0.13.0.0, 0.13.0.1, 0.13.1.0, 0.13.1.1, 0.13.1.2, 0.13.1.3, 0.13.1.4, 0.13.1.5, 0.13.1.6, 0.13.1.7, 0.14.0.0, 0.14.0.1, 0.14.0.2, 0.15.0.0, 0.15.0.1, 0.15.0.2, 1.0.0, 1.1.0, 1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.1.5, 1.1.6, 1.2.0, 1.2.1, 1.2.2, 1.2.3, 1.2.4, 1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.4.0, 1.4.1, 1.4.2, 1.4.3 (info)
Change log CHANGELOG.markdown
Dependencies aeson (>=0.8), array, base (>=4.7 && <5), bifunctors, bytestring, cereal (>=0.4 && <0.6), clock, connection (>=0.2 && <0.3), containers (>=0.5 && <0.6), dns (>=3.0.1), dotnet-timespan, ekg-core, exceptions, fast-logger, hashable, http-client (>=0.5 && <0.6), interpolate, lifted-async, lifted-base, machines (>=0.6), monad-control, monad-logger (>=0.3.20), mono-traversable (>=1 && <2), mtl, protobuf (>=0.2.1.1 && <0.3), random (>=1 && <2), safe-exceptions, semigroups (>=0.5), stm, stm-chans, text, time (>=1.4), transformers-base, unordered-containers, uuid (>=1.3 && <1.4) [details]
License BSD-3-Clause
Copyright Yorick Laupa
Author Yorick Laupa
Maintainer yo.eight@gmail.com
Revised Revision 1 made by YorickLaupa at 2018-09-12T07:46:08Z
Category Database
Home page https://gitlab.com/YoEight/eventstore-hs
Source repo head: git clone https://gitlab.com/YoEight/eventstore-hs.git
Uploaded by YorickLaupa at 2018-09-06T09:17:52Z
Distributions
Reverse Dependencies 2 direct, 0 indirect [details]
Downloads 41543 total (157 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-09-06 [all 1 reports]

Readme for eventstore-1.1.6

[back to package description]

EventStore Haskell TCP client

Talk and exchange ideas in our dedicated Discord Server

That driver supports 100% of EventStore features ! More information about the GetEventStore database can be found there: https://eventstore.org/

Requirements

  • 64bits system
  • GHC >= 7.8.3
  • Cabal >= 1.18
  • EventStore >= 3.0.0 (>= 3.1.0 if you want competing consumers).

Note: If you use this client version >= to 1.1, it will only supports EventStore >= 4.0.0.

Install

$ cabal update
$ cabal install eventstore
  • From source
$ git clone https://gitlab.com/YoEight/eventstore-hs.git
$ cd eventstore
$ cabal install --only-dependencies
$ cabal configure
$ cabal install

How to test

Tests are available. Those assume a server is running on 127.0.0.1 and 1113 port.

$ cabal install --only-dependencies --enable-tests
$ cabal configure --enable-tests
$ cabal test

How to use

This code snippet showcases client version >= 1.1.

{-# LANGUAGE OverloadedStrings #-} -- That library uses `Text` pervasively. This pragma permits to use
                                   -- String literal when a Text is needed.
module Main where

import Control.Concurrent.Async (wait)
import Data.Aeson
-- It requires to have `aeson` package installed. Note that EventStore doesn't constraint you to JSON
-- format but putting common use aside, by doing so you'll be able to use some interesting EventStore
-- features like its Complex Event Processing (CEP) capabality.

import Database.EventStore
-- Note that imports 'NonEmpty' data constructor and 'nonEmpty' function from
-- 'Data.List.NonEmpty'.

main :: IO ()
main = do
    -- A common pattern with an EventStore connection is to create a single instance only and pass it
    -- wherever you need it (it's threadsafe). It's very important to not consider an EventStore connection like
    -- its regular SQL counterpart. An EventStore connection will try its best to reconnect
    -- automatically to the server if the connection dropped. Of course that behavior can be tuned
    -- through some settings.
    conn <- connect defaultSettings (Static "127.0.0.1" 1113)
    let js  = object ["isHaskellTheBest" .= True] -- (.=) comes from Data.Aeson module.
        evt = createEvent "programming" Nothing (withJson js)

    -- Appends an event to a stream named `languages`.
    as <- sendEvent conn "languages" anyVersion evt Nothing

    -- EventStore interactions are fundamentally asynchronous. Nothing requires you to wait
    -- for the completion of an operation, but it's good to know if something went wrong.
    _ <- wait as

    -- Again, if you decide to `shutdown` an EventStore connection, it means your application is
    -- about to terminate.
    shutdown conn

    -- Make sure the EventStore connection completes every ongoing operation. For instance, if
    -- at the moment we call `shutdown` and some operations (or subscriptions) were still pending,
    -- the connection aborted all of them.
    waitTillClosed conn

Notes

That library was tested on Linux and OSX.

Contributions and bug reports are welcome!

BSD3 License

-Yorick Laupa