public static ITomatoLogClient Create(TomatoLogSinkOptions options)
        {
            switch (options.FlowType)
            {
            case LogFlowTypes.Redis: {
                var eventOption = options.RedisOptions;
                if (eventOption == null)
                {
                    throw new ArgumentNullException(nameof(eventOption));
                }
                return(new TomatoLogClientRedis(eventOption));
            }

            case LogFlowTypes.RabbitMq: {
                var eventOption = options.RabbitMqOptions;
                if (eventOption == null)
                {
                    throw new ArgumentNullException(nameof(eventOption));
                }
                return(new TomatoLogClientRabbitMQ(eventOption));
            }

            case LogFlowTypes.Kafka: {
                var eventOption = options.KafkaOptions;
                if (eventOption == null)
                {
                    throw new ArgumentNullException(nameof(eventOption));
                }
                return(new TomatoLogClientKafka(eventOption));
            }

            default:
                throw new InvalidOperationException("Unknown flow type.");
            }
        }
 /// <summary>
 /// Create a new instance of <see cref="TomatoLogPayloadClientProvider"/>
 /// </summary>
 /// <param name="settings"></param>
 /// <param name="loggingConfiguration"></param>
 public TomatoLogPayloadClientProvider(IOptions <TomatoLogSinkOptions> settings, LoggingConfiguration loggingConfiguration)
 {
     _sinkOptions          = settings == null ? new TomatoLogSinkOptions() : settings.Value;
     _loggingConfiguration = loggingConfiguration ?? throw new ArgumentNullException(nameof(loggingConfiguration));
 }