kurrentdb

A Gleam client foundation for KurrentDB.

import kurrentdb
import kurrentdb_erlang

import gleam/json

pub fn main() -> Nil {
  let name = process.new_name("kurrentdb")
  let assert Ok(_supervisor) = kurrentdb_erlang.start_stream(name)

  // Create the client
  let assert Ok(client) = kurrentdb.from_connection_string(connection_string)

  // Create the event
  let event =
    kurrentdb.json_event(
      uuid: "00000000-0000-4000-8000-000000000000",
      event_type: "kurrentdb-erlang-test",
      data: json.object([#("runtime", json.string("erlang"))]),
    )

  // Append to the stream
  let assert Ok(kurrentdb.AppendSuccess(current_revision: 0, position: _)) =
    kurrentdb.append_to_stream(
      client,
      stream: "kurrentdb-erlang-integration",
      events: [event],
      options: kurrentdb.default_append_options()
        |> kurrentdb.expected_revision(kurrentdb.Any),
      // Using a sans-io we can attach a independant backend to do the request for us.
      using: kurrentdb_erlang.send(name, _),
    )
}

Status

This is an early implementation. It currently includes protobuf codecs and a sans-io transport boundary. The core package builds typed requests and decodes responses; separate transport packages perform I/O.

Development

gleam test  # Run the tests
Search Document