code: func ToGRPC(err error) error {
  	if err == nil {
  		return nil
  	}
  	userMessage := trace.UserMessage(err)
  	if trace.IsNotFound(err) {
  		return grpc.Errorf(codes.NotFound, userMessage)
  	}
  	if trace.IsAlreadyExists(err) {
  		return grpc.Errorf(codes.AlreadyExists, userMessage)
  	}
  	if trace.IsAccessDenied(err) {
  		return grpc.Errorf(codes.PermissionDenied, userMessage)
  	}
  	if trace.IsCompareFailed(err) {
  		return grpc.Errorf(codes.FailedPrecondition, userMessage)
  	}
  	if trace.IsBadParameter(err) || trace.IsOAuth2(err) {
  		return grpc.Errorf(codes.InvalidArgument, userMessage)
  	}
  	if trace.IsLimitExceeded(err) {
  		return grpc.Errorf(codes.ResourceExhausted, userMessage)
  	}
  	if trace.IsConnectionProblem(err) {
  		return grpc.Errorf(codes.Unavailable, userMessage)
  	}
  	if trace.IsNotImplemented(err) {
  		return grpc.Errorf(codes.Unimplemented, userMessage)
  	}
  	return grpc.Errorf(codes.Unknown, userMessage)
  }
docs: // ToGRPC converts error to GRPC-compatible error