Versions |
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.1, 1.3.2, 1.3.3, 1.4.0, 1.4.1, 1.4.2, 1.4.3 |
Change log |
CHANGELOG.markdown |
Dependencies |
aeson (>=0.8), array, base (>=4.7 && <5), bifunctors, bytestring, cereal (>=0.4 && <0.6), clock, connection (>=0.2), containers, dns (>=3.0.1), dotnet-timespan, ekg-core, exceptions, fast-logger, hashable, http-client (>=0.5), interpolate, lifted-async, lifted-base, monad-control, monad-logger (>=0.3.20), mono-traversable (>=1 && <2), mtl, protobuf (>=0.2.1.1 && <0.3), random (>=1 && <2), safe, safe-exceptions, semigroups (>=0.5), stm, stm-chans, streaming, text, time (>=1.4), transformers-base, unordered-containers, uuid (>=1.3 && <1.4), vector [details] |
License |
BSD-3-Clause |
Copyright |
Yorick Laupa |
Author |
Yorick Laupa |
Maintainer |
yo.eight@gmail.com |
Category |
Database |
Home page |
https://github.com/YoEight/eventstore
|
Source repo |
head: git clone https://github.com/YoEight/eventstore.git |
Uploaded |
by YorickLaupa at 2019-09-11T12:49:23Z |
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 >= 8.0.3
- Cabal >= 1.18
- EventStore >= 4
Note: If you use this client version >= to 1.1
, it will only supports EventStore >= 4.0.0.
Install
$ cabal update
$ cabal install eventstore
$ 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
{-# 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 (StreamName "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