httpeventstore

Rust HTTP connector to Event Store.

Is currently targeting EventStore 3.x.

Tags

Rust, Database, Event Store, Event Sourcing, CQRS, RESTful API, AtomPub

Getting started

TODO: show Cargo.toml.

``` extern crate httpeventstore; extern crate serde_json; extern crate uuid;

use httpeventstore::client::Client; use httpeventstore::write::Event; use httpeventstore::read::BodyEntry; use httpeventstore::expected_version::ExpectedVersion;

fn main() { let client = Client::default(); // 127.0.0.1:2113 by default

let event = Event {
    event_id: uuid::Uuid::new_v4(),
    event_type: "event-type".to_string(),
    data: Some(serde_json::from_str(r#"{ "a": "1" }"#).unwrap())
};

client.append_to_stream("newstream", ExpectedVersion::NoStream, vec![event]).unwrap();
let stream = client.read_stream_events_forward::<BodyEntry>("newstream", 0, 100, true).unwrap();

println!("Stream entry: {:?}", stream.entries[0]);

} ```

Main public API types

API functions

appendtostream

cURL: curl -i -d @simple-event.txt -H "Content-Type:application/vnd.eventstore.events+json" "http://127.0.0.1:2113/streams/newstream"

Rust: client.append_to_stream("newstream", ExpectedVersion::NoStream, vec![simple_event]);

readstreamevents_forward

cURL: curl -i -H "Accept:application/vnd.eventstore.atom+json" "http://127.0.0.1:2113/streams/newstream"

Rust: let result = client.read_stream_events_forward::<NoneEntry>("newstream", 0, 100, true);

Embedding data into stream

There are two options reading streams: embed full fledged events or just provide links to actual event data. Compare: ``` let streamwithdata = client.readstreameventsforward::("newstream", 0, 100, true).unwrap(); let streamwithlinks = client.readstreameventsforward::("newstream", 0, 100, true).unwrap();

```

Check tests/test_read_stream_events_forward.rs and src/lib.rs.in for details.

delete_stream

cURL: curl -v -X DELETE http://127.0.0.1:2113/streams/foo

Rust: client.delete_stream("foo", ExpectedVersion::Any);

harddeletestream

cURL: curl -v -X DELETE http://127.0.0.1:2113/streams/foo2 -H "ES-HardDelete:true"

Rust: client.hard_delete_stream("foo", ExpectedVersion::Any);

Development environment

``` $ uname -a Linux blah 4.4.0-47-generic #68-Ubuntu SMP Wed Oct 26 19:39:52 UTC 2016 x8664 x8664 x86_64 GNU/Linux

$ rustc --version rustc 1.13.0 (2c6933acc 2016-11-07) ```

License

MIT