README.md

# cratis_chronicle_contracts

Generated Chronicle gRPC contracts for Elixir.

This package is intentionally non-idiomatic. Its job is to expose generated
protobuf and gRPC client modules that an idiomatic Elixir client can build on
top of later.

## Installation

```elixir
def deps do
  [
    {:cratis_chronicle_contracts, "~> 0.1.0"}
  ]
end
```

## What Is In The Package

- `lib/generated` contains the generated protobuf message modules and `*.Stub`
  gRPC client modules.

## Generating The Elixir Client

From the repository root:

```bash
cd Source/Clients/Elixir
bash ./generate-protos.sh
```

The script:

1. Copies `Source/Kernel/Protobuf` into `priv/protos`
2. Generates Elixir protobuf and gRPC modules into `lib/generated`

The generated files are not meant to be edited by hand.

## Using Generated Stubs

After generating the Elixir sources, use the generated `*.Stub` modules under
`Cratis.Chronicle.Contracts.*` with the channel returned by
your gRPC connection/channel implementation.

For example, after generation you can call the generated services like this:

```elixir
{:ok, response} =
  Cratis.Chronicle.Contracts.EventStores.Stub.get_event_stores(
    channel,
    Google.Protobuf.Empty.new()
  )
```

## Publishing

The repository contains a dedicated GitHub Actions workflow for publishing this
package to Hex. The publish flow regenerates the Elixir sources from the current
proto files before running tests and `mix hex.publish --yes`.