Categorygithub.com/srvc/grpc-errors
modulepackage
0.2.0
Repository: https://github.com/srvc/grpc-errors.git
Documentation: pkg.go.dev

# README

grpc-errors

Build Status codecov GoDoc Go project version Go Report Card license

grpc-errors is a middleware providing better error handling to resolve errors easily.

Example

package main

import (
	"context"
	"net"

	"github.com/creasty/apperrors"
	"github.com/grpc-ecosystem/go-grpc-middleware"
	"github.com/izumin5210/grpc-errors"
	"google.golang.org/grpc"
	"google.golang.org/grpc/codes"
)

const (
	CodeOK int = iota
	CodeInvalidArgument
	CodeNotFound
	CodeYourCustomError
	CodeNotWrapped
	CodeUnknown
)

var grpcCodeByYourCode = map[int]codes.Code{
	CodeOK:              codes.OK,
	CodeInvalidArgument: codes.InvalidArgument,
	CodeNotFound:        codes.NotFound,
}

func main() {
	lis, err := net.Listen("tcp", "api.example.com:80")
	if err != nil {
		panic(err)
	}

	errorHandlers := []grpcerrors.ErrorHandlerFunc{
		grpcerrors.WithNotWrappedErrorHandler(func(c context.Context, err error) error {
			// WithNotWrappedErrorHandler handles an error not wrapped with `*apperror.Error`.
			// A handler function should wrap received error with `*apperror.Error`.
			return apperrors.WithStatusCode(err, CodeNotWrapped)
		}),
		grpcerrors.WithReportableErrorHandler(func(c context.Context, err *apperrors.Error) error {
			// WithReportableErrorHandler handles an erorr annotated with the reportability.
			// You reports to an external service if necessary.
			// And you can attach request contexts to error reports.
			return err
		}),
		grpcerrors.WithStatusCodeMap(grpcCodeByYourCode),
	}

	s := grpc.NewServer(
		grpc_middleware.WithStreamServerChain(
			grpcerrors.StreamServerInterceptor(errorHandlers...),
		),
		grpc_middleware.WithUnaryServerChain(
			grpcerrors.UnaryServerInterceptor(errorHandlers...),
		),
	)

	// Register server implementations

	s.Serve(lis)
}

# Packages

Package errorstesting is a generated protocol buffer package.

# Functions

StreamServerInterceptor returns a new streaming server interceptor to handle errors.
UnaryServerInterceptor returns a new unary server interceptor to handle errors.
WithAppErrorHandler returns a new error handler function for handling errors wrapped with apperrors.
WithNotWrappedErrorHandler returns a new error handler function for handling not wrapped errors.
WithReportableErrorHandler returns a new error handler function for handling errors annotated with the reportability.
WithStatusCodeMap returns a new error handler function for mapping status codes to gRPC's one.
WithStatusCodeMapper returns a new error handler function for mapping status codes to gRPC's one with given function.

# Type aliases

AppErrorHandlerFunc is a function that called by interceptors when specified application erorrs are detected.
ErrorHandlerFunc is a function that called by interceptors when specified erorrs are detected.