code: func PayloadUnaryServerInterceptor(entry *logrus.Entry, decider grpc_logging.ServerPayloadLoggingDecider) grpc.UnaryServerInterceptor {
  	return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
  		if !decider(ctx, info.FullMethod, info.Server) {
  			return handler(ctx, req)
  		}
  		// Use the provided logrus.Entry for logging but use the fields from context.
  		logEntry := entry.WithFields(ctx_logrus.Extract(ctx).Data)
  		logProtoMessageAsJson(logEntry, req, "grpc.request.content", "server request payload logged as grpc.request.content field")
  		resp, err := handler(ctx, req)
  		if err == nil {
  			logProtoMessageAsJson(logEntry, resp, "grpc.response.content", "server response payload logged as grpc.request.content field")
  		}
  		return resp, err
  	}
  }
docs: // PayloadUnaryServerInterceptor returns a new unary server interceptors that logs the payloads of requests.
  //
  // This *only* works when placed *after* the `grpc_logrus.UnaryServerInterceptor`. However, the logging can be done to a
  // separate instance of the logger.