Newer
Older
RussianDoll / RussianDoll.cs
@Derek Comartin Derek Comartin on 18 Aug 2021 1 KB Init
using System;

namespace PipesAndFilters
{
    public class RussianDoll
    {
        public void Pump(string request)
        {
            Logging(request, o1 =>
                Validation(o1, o2 =>
                    Retry(o2, o3 =>
                        Receiver(o3, o4 => { }))));
        }

        private void Logging(string request, Action<string> nextFilter)
        {
            Console.WriteLine("Logging Request");
            nextFilter(request);
        }

        private void Validation(string request, Action<string> nextFilter)
        {
            if (request == "Hello World")
            {
                nextFilter(request);
            }
        }

        private void Retry(string request, Action<string> nextFilter)
        {
            try
            {
                nextFilter(request);
            }
            catch (InvalidOperationException)
            {
                nextFilter(request);
            }
        }

        private void Receiver(string request, Action<string> nextFilter)
        {
            Console.WriteLine($"Thanks for the request: {request}");

            nextFilter(request);
        }
    }
}