tower-rs/tower-http

Implement `From<NonZeroI32>` for `GrpcCode`

Opened this issue · 0 comments

  • I have looked for existing issues (including closed) about this

Feature Request

GrpcCode does not provide the required From<T> implementations to easily be used over a tonic server that returns a tonic::Status with a tonic::Code. These logically are the same concept, but cannot be converted between these enums (and the numerical representaions) except by implementing your own matching logic.

Motivation

We are implementing a GrpcErrorsAsFailures for a tracing layer on top of a tonic server, and this returns a GrpcFailureClass::Code(NonZeroI32). It would be nice to have a simple path to convert this to a GrpcCode so we can leverage this in our tracing to get human-readable code strings.

Proposal

Similarly, if not identical, to impl From<i32> for tonic::Code.

Alternatives

The alternative is that users have to implement from_i32 or similar as methods themselves, which is potentially more error-prone than using a standard and common implementation, especially if gRPC status codes are changed in the future (such as to add new enumerated values for additional statuses).