The first design iteration of
tower-abci used raw
protobuf-generated types from the
crate. However, because these types are generated from protobuf definitions,
they’re much less ergonomic: they don’t follow Rust naming conventions, they
can’t be well-organized into modules, they can’t be easily documented, etc.
More importantly, because protobufs require that all fields be optional and
have default values, using raw proto types means that validation checks are
scattered throughout the codebase.
To fix this,
tendermint-rs PR #862 adds a complete model for the
ABCI protocol as a set of Rust domain types for each request and response
method, and provides validating conversions between the domain types and the
raw proto types.