public static ILambdaConfigurator UseCustomSerializer <TSerializer>(this ILambdaConfigurator configurator)
            where TSerializer : class, ISerializer
        {
            _ = configurator ?? throw new ArgumentNullException(nameof(configurator));

            configurator.Services.AddSingleton <ISerializer, TSerializer>();

            return(configurator);
        }
        public void BuildConfiguratorShouldConfigureAwsServices(
            ServiceCollection serviceCollection,
            [Substitute] IConfigurationRoot configuration,
            [Substitute] ILambdaConfigurator configurator
            )
        {
            serviceCollection.AddSingleton(configurator);
            serviceCollection.AddSingleton <IConfiguration>(configuration);

            var provider = serviceCollection.BuildServiceProvider();

            TestLambdaHostBuilder.RunOptionsConfigurator(provider, serviceCollection);

            configurator.Received().ConfigureAwsServices(Arg.Is(serviceCollection));
        }
        public static ILambdaConfigurator <TMessage, THandler> UseParallelExecution <TMessage, THandler>(this ILambdaConfigurator <TMessage, THandler> configurator, int?maxDegreeOfParallelism = null)
            where TMessage : class
            where THandler : class, IMessageHandler <TMessage>
        {
            configurator.Services.AddTransient <IEventHandler <SQSEvent>, ParallelSqsEventHandler <TMessage> >();

            if (maxDegreeOfParallelism.HasValue)
            {
                configurator.Services.Configure <ParallelSqsExecutionOptions>(option => option.MaxDegreeOfParallelism = maxDegreeOfParallelism.Value);
            }

            return(configurator);
        }