# README
grpc-connect-go-errors
Description
This small Go package converts google.golang.org/grpc
error codes to connectrpc.com/connect-go
error codes.
Motivation
During the migration process from gRPC to connect-go, developers often face the challenge of
translating google.golang.org/grpc
errors to their connect-go
equivalents.
This package aims to address these issues by offering a streamlined conversion process.
Specific Use Case: Migrating from grpc-gateway to connect-go
A common scenario where this package proves particularly useful is when migrating from grpc-gateway to connect-go:
- In existing grpc-gateway implementations,
- the
status.Error
with appropriatecodes.Code
is automatically translated to the corresponding HTTP status. - When wrapping a gRPC service implementation with a connect-go handler, errors returned by the gRPC service are passed to the connect-go handler. However, connect-go expects explicit
connect.Code
andconnect.Error
. - Without proper error conversion, all errors from the gRPC service will result in HTTP 500 status codes when handled by connect-go.
This package solves this issue by allowing developers to wrap errors returned by the gRPC service before passing them to the connect-go handler, ensuring correct HTTP status codes are maintained during the migration process.
I've created an issue in the connect-go repo, and @jhump responded:
One big objective of Connect is providing support for HTTP 1.1 for web and mobile RPC clients, another is to provide libraries that are lightweight & simple and that use standard (or widely used) libraries and idioms for the target language. So pulling the behemoth that is grpc-go into connect-go's dependency graph is a non-starter.
https://github.com/connectrpc/connect-go/issues/763
@jhump's insightful feedback was instrumental in shaping the direction of this project. After considering his response, I decided to address this specific need by implementing this small Go package. It provides a focused solution for converting gRPC error codes to connect-go error codes without introducing heavy dependencies, aligning with connect-go's philosophy of lightweight and simple libraries.
Usage
package controller
import (
"context"
"github.com/franchb/grpc-connect-go-errors"
)
// ...
func (ps *PingServer) Ping(
ctx context.Context,
req *connect.Request[pingv1.PingRequest],
) (*connect.Response[pingv1.PingResponse], error) {
response, err := ps.grpccontroller.Ping(ctx, ...)
if err != nil {
return nil, connectgrpcerr.FromGRPCError(err)
}
// ...other code here
}
Status: Alpha
This package is in its alpha stage and should be considered unstable.
License
Offered under the Apache 2 license.