Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,22 @@ jobs:
- name: Create new version
if: ${{ steps.get_next_version.outputs.hasNextVersion == 'true' }}
run: |
cargo install cargo-edit
cargo set-version ${{ steps.get_next_version.outputs.version }}
git config --global user.email "[email protected]"
git config --global user.name "${{ github.actor }}"
git add .
git commit -m 'chore: Bump version to ${{ steps.get_next_version.outputs.version }}. [skip ci]'
git push
git tag v${{steps.get_next_version.outputs.version}}
git push origin v${{steps.get_next_version.outputs.version}}
- name: Build artifacts
if: ${{ steps.get_next_version.outputs.hasNextVersion == 'true' }}
run: |
cargo build
- name: Publish new version
if: ${{ steps.get_next_version.outputs.hasNextVersion == 'true' }}
run: |
echo "${{ secrets.TOKEN_GITHUB_TO_CRATES_RW }}" | cargo login
cargo package
cargo publish
3 changes: 1 addition & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[package]
name = "eventsourcingdb-client-rust"
name = "eventsourcingdb"
version = "0.1.0"
edition = "2024"
description = "A client library for the EventsourcingDB by the native web."
Expand Down Expand Up @@ -33,7 +33,6 @@ typed-builder = "0.21.0"
url = "2.5.4"

[dev-dependencies]
eventsourcingdb-client-rust = { path = ".", features = ["testcontainer"] }
testcontainers = { version = "0.24.0", features = ["http_wait"] }
tokio = { version = "1.45.1", features = ["full"] }
tokio-test = "0.4.4"
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ analyze:
@cargo doc --all-features --no-deps --document-private-items

test:
@cargo test
@cargo test --features testcontainer

format:
@cargo fmt
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# eventsourcingdb-client-rust
# eventsourcingdb

The official Rust client SDK for [EventSourcingDB](https://www.eventsourcingdb.io/).

Expand Down
64 changes: 32 additions & 32 deletions src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
//! To use the client, create it with the base URL and API token of your [EventsourcingDB](https://www.eventsourcingdb.io/) instance.
//! ```
//! # tokio_test::block_on(async {
//! # let container = eventsourcingdb_client_rust::container::Container::start_default().await.unwrap();
//! # let container = eventsourcingdb::container::Container::start_default().await.unwrap();
//! let db_url = "http://localhost:3000/";
//! let api_token = "secrettoken";
//! # let db_url = container.get_base_url().await.unwrap();
//! # let api_token = container.get_api_token();
//! let client = eventsourcingdb_client_rust::client::Client::new(db_url, api_token);
//! let client = eventsourcingdb::client::Client::new(db_url, api_token);
//! client.ping().await.expect("Failed to ping");
//! client.verify_api_token().await.expect("Failed to verify API token");
//! # })
Expand Down Expand Up @@ -57,7 +57,7 @@ impl Client {
/// Get the base URL of the client to use for API calls
/// ```
/// # use url::Url;
/// # use eventsourcingdb_client_rust::client::Client;
/// # use eventsourcingdb::client::Client;
/// # let client = Client::new("http://localhost:8080/".parse().unwrap(), "token");
/// let base_url = client.get_base_url();
/// # assert_eq!(base_url.as_str(), "http://localhost:8080/");
Expand All @@ -69,7 +69,7 @@ impl Client {

/// Get the API token of the client to use for API calls
/// ```
/// # use eventsourcingdb_client_rust::client::Client;
/// # use eventsourcingdb::client::Client;
/// # use url::Url;
/// # let client = Client::new("http://localhost:8080/".parse().unwrap(), "secrettoken");
/// let api_token = client.get_api_token();
Expand Down Expand Up @@ -161,12 +161,12 @@ impl Client {
///
/// ```
/// # tokio_test::block_on(async {
/// # let container = eventsourcingdb_client_rust::container::Container::start_default().await.unwrap();
/// # let container = eventsourcingdb::container::Container::start_default().await.unwrap();
/// let db_url = "http://localhost:3000/";
/// let api_token = "secrettoken";
/// # let db_url = container.get_base_url().await.unwrap();
/// # let api_token = container.get_api_token();
/// let client = eventsourcingdb_client_rust::client::Client::new(db_url, api_token);
/// let client = eventsourcingdb::client::Client::new(db_url, api_token);
/// client.ping().await.expect("Failed to ping");
/// # })
/// ```
Expand All @@ -181,16 +181,16 @@ impl Client {
/// Reads events from the DB instance.
///
/// ```
/// use eventsourcingdb_client_rust::event::EventCandidate;
/// use eventsourcingdb::event::EventCandidate;
/// use futures::StreamExt;
/// # use serde_json::json;
/// # tokio_test::block_on(async {
/// # let container = eventsourcingdb_client_rust::container::Container::start_default().await.unwrap();
/// # let container = eventsourcingdb::container::Container::start_default().await.unwrap();
/// let db_url = "http://localhost:3000/";
/// let api_token = "secrettoken";
/// # let db_url = container.get_base_url().await.unwrap();
/// # let api_token = container.get_api_token();
/// let client = eventsourcingdb_client_rust::client::Client::new(db_url, api_token);
/// let client = eventsourcingdb::client::Client::new(db_url, api_token);
/// let mut event_stream = client.read_events("/", None).await.expect("Failed to read events");
/// while let Some(event) = event_stream.next().await {
/// println!("Found Type {:?}", event.expect("Error while reading events"));
Expand All @@ -214,16 +214,16 @@ impl Client {
/// Observe events from the DB instance.
///
/// ```
/// use eventsourcingdb_client_rust::event::EventCandidate;
/// use eventsourcingdb::event::EventCandidate;
/// use futures::StreamExt;
/// # use serde_json::json;
/// # tokio_test::block_on(async {
/// # let container = eventsourcingdb_client_rust::container::Container::start_default().await.unwrap();
/// # let container = eventsourcingdb::container::Container::start_default().await.unwrap();
/// let db_url = "http://localhost:3000/";
/// let api_token = "secrettoken";
/// # let db_url = container.get_base_url().await.unwrap();
/// # let api_token = container.get_api_token();
/// let client = eventsourcingdb_client_rust::client::Client::new(db_url, api_token);
/// let client = eventsourcingdb::client::Client::new(db_url, api_token);
/// # client.write_events(
/// # vec![
/// # EventCandidate::builder()
Expand Down Expand Up @@ -261,12 +261,12 @@ impl Client {
///
/// ```
/// # tokio_test::block_on(async {
/// # let container = eventsourcingdb_client_rust::container::Container::start_default().await.unwrap();
/// # let container = eventsourcingdb::container::Container::start_default().await.unwrap();
/// let db_url = "http://localhost:3000/";
/// let api_token = "secrettoken";
/// # let db_url = container.get_base_url().await.unwrap();
/// # let api_token = container.get_api_token();
/// let client = eventsourcingdb_client_rust::client::Client::new(db_url, api_token);
/// let client = eventsourcingdb::client::Client::new(db_url, api_token);
/// client.verify_api_token().await.expect("Failed to ping");
/// # })
/// ```
Expand All @@ -281,16 +281,16 @@ impl Client {
/// Registers an event schema with the DB instance.
///
/// ```
/// use eventsourcingdb_client_rust::event::EventCandidate;
/// use eventsourcingdb::event::EventCandidate;
/// use futures::StreamExt;
/// # use serde_json::json;
/// # tokio_test::block_on(async {
/// # let container = eventsourcingdb_client_rust::container::Container::start_default().await.unwrap();
/// # let container = eventsourcingdb::container::Container::start_default().await.unwrap();
/// let db_url = "http://localhost:3000/";
/// let api_token = "secrettoken";
/// # let db_url = container.get_base_url().await.unwrap();
/// # let api_token = container.get_api_token();
/// let client = eventsourcingdb_client_rust::client::Client::new(db_url, api_token);
/// let client = eventsourcingdb::client::Client::new(db_url, api_token);
/// let event_type = "io.eventsourcingdb.test";
/// let schema = json!({
/// "type": "object",
Expand Down Expand Up @@ -323,16 +323,16 @@ impl Client {
///
/// To get all subjects in the DB, just pass `None` as the `base_subject`.
/// ```
/// use eventsourcingdb_client_rust::event::EventCandidate;
/// use eventsourcingdb::event::EventCandidate;
/// use futures::StreamExt;
/// # use serde_json::json;
/// # tokio_test::block_on(async {
/// # let container = eventsourcingdb_client_rust::container::Container::start_default().await.unwrap();
/// # let container = eventsourcingdb::container::Container::start_default().await.unwrap();
/// let db_url = "http://localhost:3000/";
/// let api_token = "secrettoken";
/// # let db_url = container.get_base_url().await.unwrap();
/// # let api_token = container.get_api_token();
/// let client = eventsourcingdb_client_rust::client::Client::new(db_url, api_token);
/// let client = eventsourcingdb::client::Client::new(db_url, api_token);
/// let mut subject_stream = client.list_subjects(None).await.expect("Failed to list event types");
/// while let Some(subject) = subject_stream.next().await {
/// println!("Found Type {}", subject.expect("Error while reading types"));
Expand All @@ -342,16 +342,16 @@ impl Client {
///
/// To get all subjects under /test in the DB, just pass `Some("/test")` as the `base_subject`.
/// ```
/// use eventsourcingdb_client_rust::event::EventCandidate;
/// use eventsourcingdb::event::EventCandidate;
/// use futures::StreamExt;
/// # use serde_json::json;
/// # tokio_test::block_on(async {
/// # let container = eventsourcingdb_client_rust::container::Container::start_default().await.unwrap();
/// # let container = eventsourcingdb::container::Container::start_default().await.unwrap();
/// let db_url = "http://localhost:3000/";
/// let api_token = "secrettoken";
/// # let db_url = container.get_base_url().await.unwrap();
/// # let api_token = container.get_api_token();
/// let client = eventsourcingdb_client_rust::client::Client::new(db_url, api_token);
/// let client = eventsourcingdb::client::Client::new(db_url, api_token);
/// let mut subject_stream = client.list_subjects(Some("/test")).await.expect("Failed to list event types");
/// while let Some(subject) = subject_stream.next().await {
/// println!("Found Type {}", subject.expect("Error while reading types"));
Expand All @@ -376,16 +376,16 @@ impl Client {
/// List all event types in the DB instance.
///
/// ```
/// use eventsourcingdb_client_rust::event::EventCandidate;
/// use eventsourcingdb::event::EventCandidate;
/// use futures::StreamExt;
/// # use serde_json::json;
/// # tokio_test::block_on(async {
/// # let container = eventsourcingdb_client_rust::container::Container::start_default().await.unwrap();
/// # let container = eventsourcingdb::container::Container::start_default().await.unwrap();
/// let db_url = "http://localhost:3000/";
/// let api_token = "secrettoken";
/// # let db_url = container.get_base_url().await.unwrap();
/// # let api_token = container.get_api_token();
/// let client = eventsourcingdb_client_rust::client::Client::new(db_url, api_token);
/// let client = eventsourcingdb::client::Client::new(db_url, api_token);
/// let mut type_stream = client.list_event_types().await.expect("Failed to list event types");
/// while let Some(ty) = type_stream.next().await {
/// println!("Found Type {}", ty.expect("Error while reading types").name);
Expand All @@ -405,15 +405,15 @@ impl Client {
/// Writes events to the DB instance.
///
/// ```
/// use eventsourcingdb_client_rust::event::EventCandidate;
/// use eventsourcingdb::event::EventCandidate;
/// # use serde_json::json;
/// # tokio_test::block_on(async {
/// # let container = eventsourcingdb_client_rust::container::Container::start_default().await.unwrap();
/// # let container = eventsourcingdb::container::Container::start_default().await.unwrap();
/// let db_url = "http://localhost:3000/";
/// let api_token = "secrettoken";
/// # let db_url = container.get_base_url().await.unwrap();
/// # let api_token = container.get_api_token();
/// let client = eventsourcingdb_client_rust::client::Client::new(db_url, api_token);
/// let client = eventsourcingdb::client::Client::new(db_url, api_token);
/// let candidates = vec![
/// EventCandidate::builder()
/// .source("https://www.eventsourcingdb.io".to_string())
Expand Down Expand Up @@ -443,16 +443,16 @@ impl Client {
/// Run an eventql query against the DB.
///
/// ```
/// use eventsourcingdb_client_rust::event::EventCandidate;
/// use eventsourcingdb::event::EventCandidate;
/// use futures::StreamExt;
/// # use serde_json::json;
/// # tokio_test::block_on(async {
/// # let container = eventsourcingdb_client_rust::container::Container::start_default().await.unwrap();
/// # let container = eventsourcingdb::container::Container::start_default().await.unwrap();
/// let db_url = "http://localhost:3000/";
/// let api_token = "secrettoken";
/// # let db_url = container.get_base_url().await.unwrap();
/// # let api_token = container.get_api_token();
/// let client = eventsourcingdb_client_rust::client::Client::new(db_url, api_token);
/// let client = eventsourcingdb::client::Client::new(db_url, api_token);
/// let query = "FROM e IN events ORDER BY e.time DESC TOP 100 PROJECT INTO e";
/// let mut row_stream = client.run_eventql_query(query).await.expect("Failed to list event types");
/// while let Some(row) = row_stream.next().await {
Expand Down
8 changes: 4 additions & 4 deletions src/container.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
//! ## Shortcut suitable for most use cases
//! This starts a container with the default settings which is most likely what you want.
//! ```
//! # use eventsourcingdb_client_rust::container::Container;
//! # use eventsourcingdb::container::Container;
//! # tokio_test::block_on(async {
//! let container = Container::start_default().await;
//! // let client = container.get_client().await;
Expand All @@ -19,7 +19,7 @@
//! ## Custom configuration
//! This allows you to configure the container to your needs.
//! ```
//! # use eventsourcingdb_client_rust::container::Container;
//! # use eventsourcingdb::container::Container;
//! # tokio_test::block_on(async {
//! let container = Container::builder()
//! .with_image_tag("v1.0.0")
Expand Down Expand Up @@ -48,7 +48,7 @@ use crate::{client::Client, error::ContainerError};
///
/// By default this container is the same as running this:
/// ```
/// # use eventsourcingdb_client_rust::container::Container;
/// # use eventsourcingdb::container::Container;
/// # tokio_test::block_on(async {
/// let builder = Container::builder()
/// .with_image_tag("latest")
Expand Down Expand Up @@ -144,7 +144,7 @@ impl ContainerBuilder {
/// You'll most likely want to use the [`Container::start_default`] method to create a new container instance for your tests.
/// For more details, see the [`crate::container`] module documentation.
/// ```
/// # use eventsourcingdb_client_rust::container::Container;
/// # use eventsourcingdb::container::Container;
/// # tokio_test::block_on(async {
/// let container = Container::start_default().await;
/// // let client = container.get_client().await;
Expand Down
2 changes: 1 addition & 1 deletion tests/essentials.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use eventsourcingdb_client_rust::{client::Client, container::Container};
use eventsourcingdb::{client::Client, container::Container};

#[tokio::test]
async fn ping() {
Expand Down
2 changes: 1 addition & 1 deletion tests/metadata_and_discovery.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use eventsourcingdb_client_rust::container::Container;
use eventsourcingdb::container::Container;
use futures::StreamExt;
use serde_json::json;

Expand Down
2 changes: 1 addition & 1 deletion tests/observe_events.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
mod utils;

use eventsourcingdb_client_rust::container::Container;
use eventsourcingdb::container::Container;
use futures::stream::StreamExt;
use serde_json::json;
use utils::create_test_eventcandidate;
Expand Down
2 changes: 1 addition & 1 deletion tests/read_events.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
mod utils;

use eventsourcingdb_client_rust::{
use eventsourcingdb::{
client::request_options::{
EventMissingStrategy, FromLatestEventOptions, Ordering, ReadEventsRequestOptions,
},
Expand Down
2 changes: 1 addition & 1 deletion tests/run_eventql_query.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use eventsourcingdb_client_rust::container::Container;
use eventsourcingdb::container::Container;
use futures::stream::TryStreamExt;

#[tokio::test]
Expand Down
4 changes: 2 additions & 2 deletions tests/testcontainer.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use eventsourcingdb_client_rust::container::Container;
use eventsourcingdb::container::Container;

#[tokio::test]
async fn start_stop_testcontainer() {
Expand Down Expand Up @@ -31,7 +31,7 @@ async fn generate_client() {
let generated_client = c.get_client().await.unwrap();
let base_url = c.get_base_url().await.unwrap();
let api_token = c.get_api_token();
let client = eventsourcingdb_client_rust::client::Client::new(base_url, api_token);
let client = eventsourcingdb::client::Client::new(base_url, api_token);
assert_eq!(client.get_base_url(), generated_client.get_base_url());
assert_eq!(client.get_api_token(), generated_client.get_api_token());
}
2 changes: 1 addition & 1 deletion tests/utils/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use chrono::{TimeDelta, Utc};
use eventsourcingdb_client_rust::event::{Event, EventCandidate};
use eventsourcingdb::event::{Event, EventCandidate};
use serde_json::{Value, json};

pub fn create_test_eventcandidate(
Expand Down
2 changes: 1 addition & 1 deletion tests/write_events.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
mod utils;

use eventsourcingdb_client_rust::{
use eventsourcingdb::{
client::Precondition,
container::Container,
event::{EventCandidate, TraceInfo},
Expand Down