/// <summary>
        /// Bridge classification of single operation's argument.
        /// Get the argument data and pass it to the segmentation strategies.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="strategy">The strategy.</param>
        /// <param name="options">The options.</param>
        /// <param name="operation">The operation.</param>
        /// <param name="argumentName">Name of the argument.</param>
        /// <param name="producedData">The produced data.</param>
        /// <returns></returns>
        private async ValueTask <Bucket> ClassifyArgumentAsync <T>(
            IProducerAsyncSegmentationStrategy strategy,
            IEventSourceOptions options,
            string operation,
            string argumentName,
            T producedData)
        {
            Bucket segments = Bucket.Empty;

            var seg = await strategy.TryClassifyAsync(
                segments,
                operation,
                argumentName,
                producedData,
                options);

            #region Validation

            if (seg == null)
            {
                return(segments);
            }

            #endregion // Validation

            return(seg);
        }
        /// <summary>
        /// Register segmentation strategy,
        /// Segmentation responsible of splitting an instance into segments.
        /// Segments is how the producer sending its raw data to
        /// the consumer. It's in a form of dictionary when
        /// keys represent the different segments
        /// and the value represent serialized form of the segment's data.
        /// </summary>
        /// <param name="segmentationStrategy">A strategy of segmentation.</param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        /// <example>
        /// Examples for segments can be driven from regulation like
        /// GDPR (personal, non-personal data),
        /// Technical vs Business aspects, etc.
        /// </example>
        IProducerHooksBuilder IProducerHooksBuilder.UseSegmentation(
            IProducerAsyncSegmentationStrategy segmentationStrategy)
        {
            var prms = Plan.AddSegmentation(segmentationStrategy);

            return(new ProducerBuilder(prms));
        }
Example #3
0
 /// <summary>
 /// Adds the segmentation.
 /// </summary>
 /// <param name="segmentation">The segmentation.</param>
 /// <returns></returns>
 public ProducerPlan AddSegmentation(
     IProducerAsyncSegmentationStrategy segmentation)
 {
     return(new ProducerPlan(this,
                             segmentationStrategies: SegmentationStrategies.Add(segmentation)));
 }