public ResponseMessage Transform(RequestMessage requestMessage, ResponseMessage original, bool useTransformerForBodyAsFile)
        {
            var handlebarsContext = _factory.Create();

            var responseMessage = new ResponseMessage();

            var template = new { request = requestMessage };

            switch (original.BodyData?.DetectedBodyType)
            {
            case BodyType.Json:
                TransformBodyAsJson(handlebarsContext.Handlebars, template, original, responseMessage);
                break;

            case BodyType.File:
                TransformBodyAsFile(handlebarsContext, template, original, responseMessage, useTransformerForBodyAsFile);
                break;

            case BodyType.String:
                responseMessage.BodyOriginal = original.BodyData.BodyAsString;
                TransformBodyAsString(handlebarsContext.Handlebars, template, original, responseMessage);
                break;
            }

            responseMessage.FaultType       = original.FaultType;
            responseMessage.FaultPercentage = original.FaultPercentage;

            // Headers
            var newHeaders = new Dictionary <string, WireMockList <string> >();

            foreach (var header in original.Headers)
            {
                var templateHeaderKey    = handlebarsContext.Handlebars.Compile(header.Key);
                var templateHeaderValues = header.Value
                                           .Select(handlebarsContext.Handlebars.Compile)
                                           .Select(func => func(template))
                                           .ToArray();

                newHeaders.Add(templateHeaderKey(template), new WireMockList <string>(templateHeaderValues));
            }

            responseMessage.Headers = newHeaders;

            switch (original.StatusCode)
            {
            case int statusCodeAsInteger:
                responseMessage.StatusCode = statusCodeAsInteger;
                break;

            case string statusCodeAsString:
                var templateForStatusCode = handlebarsContext.Handlebars.Compile(statusCodeAsString);
                responseMessage.StatusCode = templateForStatusCode(template);
                break;
            }

            return(responseMessage);
        }
        public ResponseMessage Transform(RequestMessage requestMessage, ResponseMessage original)
        {
            var handlebarsContext = _factory.Create();

            var responseMessage = new ResponseMessage {
                StatusCode = original.StatusCode
            };

            var template = new { request = requestMessage };

            switch (original.BodyData.DetectedBodyType)
            {
            case BodyType.Json:
                TransformBodyAsJson(handlebarsContext, template, original, responseMessage);
                break;

            case BodyType.File:
                TransformBodyAsFile(handlebarsContext, template, original, responseMessage);
                break;

            case BodyType.String:
                responseMessage.BodyOriginal = original.BodyData.BodyAsString;
                TransformBodyAsString(handlebarsContext, template, original, responseMessage);
                break;
            }

            // Headers
            var newHeaders = new Dictionary <string, WireMockList <string> >();

            foreach (var header in original.Headers)
            {
                var templateHeaderKey    = handlebarsContext.Compile(header.Key);
                var templateHeaderValues = header.Value
                                           .Select(handlebarsContext.Compile)
                                           .Select(func => func(template))
                                           .ToArray();

                newHeaders.Add(templateHeaderKey(template), new WireMockList <string>(templateHeaderValues));
            }

            responseMessage.Headers = newHeaders;

            return(responseMessage);
        }