func StreamServerCorrelationInterceptor()

in correlation/grpc/server_interceptors.go [69:87]


func StreamServerCorrelationInterceptor(opts ...ServerCorrelationInterceptorOption) grpc.StreamServerInterceptor {
	config := applyServerCorrelationInterceptorOptions(opts)

	return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
		var correlationID string

		wrapped := grpc_middleware.WrapServerStream(ss)
		wrapped.WrappedContext, correlationID = extractFromContext(ss.Context(), config.propagateIncomingCorrelationID)

		if config.reversePropagateCorrelationID {
			err := wrapped.SetHeader(metadata.Pairs(metadataCorrelatorKey, correlationID))
			if err != nil {
				return err
			}
		}

		return handler(srv, wrapped)
	}
}