55 lines
2.0 KiB
Markdown
55 lines
2.0 KiB
Markdown
# waymaker-client
|
|
|
|
Official client libraries for [waymaker](https://git.awesomike.com/dev/waymaker)
|
|
— the distributed coordination service (locks, streams, KV, collections,
|
|
sketches, cache, object store) over gRPC.
|
|
|
|
Three clients, one wire contract, **versioned in lockstep with the waymaker
|
|
server**:
|
|
|
|
| Language | Path | Package |
|
|
|------------|---------|---------|
|
|
| Rust | `rust/` | `waymaker-client` (crate) |
|
|
| Go | `go/` | `git.awesomike.com/pub/waymaker-client/go` (module) |
|
|
| TypeScript | `ts/` | `@waymaker/client` (npm) |
|
|
|
|
The `.proto` files in `proto/` are **vendored copies**; the waymaker server
|
|
repo is the source of truth. `scripts/sync-protos.sh` refreshes them and keeps
|
|
`VERSION` aligned with the server.
|
|
|
|
## Versioning
|
|
|
|
Every release is tagged at the **same version as the waymaker server** it
|
|
targets (see `VERSION`). A client tagged `v0.1.27` speaks the wire contract of
|
|
waymaker `v0.1.27`. The gRPC wire format is backward-compatible across patch
|
|
releases (enum integer values are stable), so a client one patch behind a
|
|
server generally interoperates — but match versions for new surface.
|
|
|
|
## Layout
|
|
|
|
```
|
|
proto/ vendored .proto (source of truth: waymaker repo)
|
|
rust/ Rust client crate (hand-written ergonomic wrappers + generated stubs)
|
|
go/ Go client module
|
|
ts/ TypeScript client (npm)
|
|
scripts/ sync-protos.sh + codegen scripts (gen-go/gen-ts)
|
|
VERSION lockstep version with the waymaker server
|
|
```
|
|
|
|
## Regenerating
|
|
|
|
```bash
|
|
# refresh protos from a local waymaker checkout, then regenerate all stubs
|
|
WAYMAKER_REPO=../waymaker ./scripts/sync-protos.sh
|
|
./scripts/gen-go.sh
|
|
./scripts/gen-ts.sh
|
|
# Rust regenerates from proto/ automatically via build.rs on `cargo build`.
|
|
```
|
|
|
|
## Quickstart
|
|
|
|
- **Rust** — see [`rust/README.md`](rust/README.md). Leader election with the
|
|
fence-watch / auto-reacquire `Lock`.
|
|
- **Go** — see [`go/README.md`](go/README.md).
|
|
- **TypeScript** — see [`ts/README.md`](ts/README.md).
|