public Configuration(
     ValueSerializerCollection valueSerializers,
     ResultParserCollection resultParsers,
     IOperationFormatter operationFormatter,
     IReadOnlyCollection <Delegate> operationPipelines)
 {
     ValueSerializers   = valueSerializers;
     ResultParsers      = resultParsers;
     OperationFormatter = operationFormatter;
     OperationPipelines = operationPipelines;
 }
        private Configuration CreateConfiguration(string clientName)
        {
            ClientOptionsModifiers options = _optionsMonitor.Get(clientName);

            if (options.ResultParsers.Count == 0)
            {
                throw new InvalidOperationException(
                          $"The specified client `{clientName}` has no result parsers configured.");
            }

            if (options.OperationFormatter is null)
            {
                throw new InvalidOperationException(
                          $"The specified client `{clientName}` has no operations formatter configured.");
            }

            Dictionary <string, IValueSerializer> serializers =
                ValueSerializers.All.ToDictionary(t => t.Name);

            foreach (ConfigureValueSerializers configure in options.ValueSerializers)
            {
                configure(serializers);
            }

            var serializerCollection = new ValueSerializerCollection(serializers);
            var parsers = new Dictionary <Type, IResultParser>();

            foreach (ConfigureResultParsers configure in options.ResultParsers)
            {
                configure(serializerCollection, parsers);
            }

            var parserCollection          = new ResultParserCollection(parsers);
            IOperationFormatter formatter = options.OperationFormatter(serializerCollection);

            var pipelines = new List <Delegate>();

            foreach (ConfigureOperationPipeline configure in options.OperationPipelines)
            {
                configure(pipelines);
            }

            return(new Configuration(
                       serializerCollection,
                       parserCollection,
                       formatter,
                       pipelines));
        }