public async Task <IActionResult> RunAsync(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = "adapters/{adapter}/mappings")]
            HttpRequest httpRequest,
            string adapter,
            CancellationToken cancellationToken)
        {
            IActionResult toReturn = null;

            if (httpRequest == null)
            {
                throw new ArgumentNullException(nameof(httpRequest));
            }

            IHeaderDictionary headerDictionary = httpRequest.Headers;

            this.httpSpiExecutionContextManager.SetContext(headerDictionary);

            GetAdapterEnumerationMappingsRequest getAdapterEnumerationMappingsRequest =
                new GetAdapterEnumerationMappingsRequest()
            {
                AdapterName = adapter,
            };

            toReturn = await this.ProcessWellFormedRequestAsync(
                getAdapterEnumerationMappingsRequest,
                cancellationToken)
                       .ConfigureAwait(false);

            return(toReturn);
        }
        /// <inheritdoc />
        public async Task <GetAdapterEnumerationMappingsResponse> GetAdapterEnumerationMappingsAsync(
            GetAdapterEnumerationMappingsRequest getAdapterEnumerationMappingsRequest,
            CancellationToken cancellationToken)
        {
            if (getAdapterEnumerationMappingsRequest == null)
            {
                throw new ArgumentNullException(nameof(getAdapterEnumerationMappingsRequest));
            }

            this.loggerWrapper.Debug(
                $"Pulling back {nameof(AdapterMappingsResult)} for " +
                $"adapter {getAdapterEnumerationMappingsRequest.AdapterName} " +
                $"from the {nameof(ICacheManager)}...");

            object unboxedMappingsResult = await this.cacheManager.GetAsync(
                getAdapterEnumerationMappingsRequest.AdapterName,
                cancellationToken)
                                           .ConfigureAwait(false);

            AdapterMappingsResult adapterMappingsResult =
                unboxedMappingsResult as AdapterMappingsResult;

            // Result will be non-null.
            this.loggerWrapper.Info(
                $"{nameof(MappingsResult)} pulled back from the " +
                $"{nameof(ICacheManager)}: {adapterMappingsResult}.");

            return(new GetAdapterEnumerationMappingsResponse
            {
                AdapterMappingsResult = adapterMappingsResult,
            });
        }
        private async Task <IActionResult> ProcessWellFormedRequestAsync(
            GetAdapterEnumerationMappingsRequest getAdapterEnumerationMappingsRequest,
            CancellationToken cancellationToken)
        {
            IActionResult toReturn = null;

            this.loggerWrapper.Debug(
                $"Invoking {nameof(IGetAdapterEnumerationMappingsProcessor)} with " +
                $"{getAdapterEnumerationMappingsRequest}...");

            GetAdapterEnumerationMappingsResponse getAdapterEnumerationMappingsResponse =
                await this.getAdapterEnumerationMappingsProcessor.GetAdapterEnumerationMappingsAsync(
                    getAdapterEnumerationMappingsRequest,
                    cancellationToken)
                .ConfigureAwait(false);

            this.loggerWrapper.Info(
                $"{nameof(IGetAdapterEnumerationMappingsProcessor)} invoked with " +
                $"success: {getAdapterEnumerationMappingsResponse}.");

            Dictionary <string, MappingsResult> mappings = getAdapterEnumerationMappingsResponse.AdapterMappingsResult?.EnumerationMappings;

            if (mappings != null && mappings.Any())
            {
                this.loggerWrapper.Debug(
                    $"Looks like we got some results: " +
                    $"{getAdapterEnumerationMappingsResponse}. Returning as JSON.");

                toReturn = new JsonResult(mappings);
            }
            else
            {
                this.loggerWrapper.Info(
                    $"No mappings found for adapter {getAdapterEnumerationMappingsRequest.AdapterName}!");

                toReturn = this.httpErrorBodyResultProvider.GetHttpErrorBodyResult(
                    HttpStatusCode.NotFound,
                    1,
                    "all",
                    getAdapterEnumerationMappingsRequest.AdapterName);
            }

            return(toReturn);
        }