Working through the [Fly.io distributed systems challenge](https://fly.io/dist-sys/), in Rust. The project is organized as a Cargo workspace. The `maelstrom-*` crates are libraries that provide the equivalent functionality as the [Maelstrom Go](https://pkg.go.dev/github.com/jepsen-io/maelstrom/demo/go) package that is provided by Fly.io. The protocol crate especially is stand-alone and just provides the serializable/deserializable Rust types for Maelstrom messages. The node crate handles IO, while the `gg-*` crates are bin crates that implement the named challenge.