diff --git a/src/WireMock.Net.StandAlone/CommandLineArguments.cs b/src/WireMock.Net.StandAlone/CommandLineArguments.cs new file mode 100644 index 00000000..f78f74ca --- /dev/null +++ b/src/WireMock.Net.StandAlone/CommandLineArguments.cs @@ -0,0 +1,32 @@ +using CommandLineParser.Arguments; + +namespace WireMock.Net.StandAlone +{ + public class CommandLineArguments + { + [ValueArgument(typeof(bool), "StartAdminInterface", DefaultValue = true, Description = "Start the AdminInterface")] + public bool StartAdminInterface { get; set; } + + [ValueArgument(typeof(bool), "ReadStaticMappings", DefaultValue = false, Description = "Read StaticMappings")] + public bool ReadStaticMappings { get; set; } + + [ValueArgument(typeof(bool), 'w', "WatchStaticMappings", DefaultValue = false, Description = "Watch the static mapping files + folder for changes when running.")] + public bool WatchStaticMappings { get; set; } + + [ValueArgument(typeof(bool), 'm', "AllowPartialMapping", DefaultValue = false, Description = "Allow PartialMapping")] + public bool AllowPartialMapping { get; set; } + + [ValueArgument(typeof(string), 'u', "AdminUsername", Description = "The username needed for __admin access.")] + public string AdminUsername { get; set; } + + [ValueArgument(typeof(string), 'p', "AdminPassword", Description = "The password needed for __admin access.")] + public string AdminPassword { get; set; } + + + [BoundedValueArgument(typeof(int), 'o', "MaxRequestLogCount", MinValue = 0, Description = "The Maximum number of RequestLogs to keep")] + public int MaxRequestLogCount { get; set; } + + [BoundedValueArgument(typeof(int), 'x', "RequestLogExpirationDuration", MinValue = 0, Description = "The RequestLog Expiration Duration in hours")] + public int RequestLogExpirationDuration { get; set; } + } +} diff --git a/src/WireMock.Net.StandAlone/StandAloneApp.cs b/src/WireMock.Net.StandAlone/StandAloneApp.cs index 916fb74b..cd1040d9 100644 --- a/src/WireMock.Net.StandAlone/StandAloneApp.cs +++ b/src/WireMock.Net.StandAlone/StandAloneApp.cs @@ -38,8 +38,9 @@ namespace WireMock.Net.StandAlone { Check.NotNull(args, nameof(args)); - var parser = new SimpleCommandLineParser(); - parser.Parse(args); + var parser = new CommandLineParser.CommandLineParser(); + var p = new CommandLineArguments(); + parser.ExtractArgumentAttributes(p); var settings = new FluentMockServerSettings { diff --git a/src/WireMock.Net.StandAlone/WireMock.Net.StandAlone.csproj b/src/WireMock.Net.StandAlone/WireMock.Net.StandAlone.csproj index f6667cc3..56f99f1b 100644 --- a/src/WireMock.Net.StandAlone/WireMock.Net.StandAlone.csproj +++ b/src/WireMock.Net.StandAlone/WireMock.Net.StandAlone.csproj @@ -41,6 +41,11 @@ + + + + + All diff --git a/src/WireMock.Net/Serialization/MappingConverter.cs b/src/WireMock.Net/Serialization/MappingConverter.cs index 46b5af01..00b4d60c 100644 --- a/src/WireMock.Net/Serialization/MappingConverter.cs +++ b/src/WireMock.Net/Serialization/MappingConverter.cs @@ -102,44 +102,49 @@ namespace WireMock.Serialization mappingModel.Response.Headers = Map(response.ResponseMessage.Headers); mappingModel.Response.UseTransformer = response.UseTransformer; - if (response.ResponseMessage.BodyData != null) - { - switch (response.ResponseMessage.BodyData?.DetectedBodyType) - { - case BodyType.String: - mappingModel.Response.Body = response.ResponseMessage.BodyData.BodyAsString; - break; - - case BodyType.Json: - mappingModel.Response.BodyAsJson = response.ResponseMessage.BodyData.BodyAsJson; - mappingModel.Response.BodyAsJsonIndented = response.ResponseMessage.BodyData.BodyAsJsonIndented; - break; - - case BodyType.Bytes: - mappingModel.Response.BodyAsBytes = response.ResponseMessage.BodyData.BodyAsBytes; - break; - - case BodyType.File: - mappingModel.Response.BodyAsFile = response.ResponseMessage.BodyData.BodyAsFile; - mappingModel.Response.BodyAsFileIsCached = response.ResponseMessage.BodyData.BodyAsFileIsCached; - break; - } - - if (response.ResponseMessage.BodyData.Encoding != null && response.ResponseMessage.BodyData.Encoding.WebName != "utf-8") - { - mappingModel.Response.BodyEncoding = new EncodingModel - { - EncodingName = response.ResponseMessage.BodyData.Encoding.EncodingName, - CodePage = response.ResponseMessage.BodyData.Encoding.CodePage, - WebName = response.ResponseMessage.BodyData.Encoding.WebName - }; - } - } + MapBodyData(response, mappingModel); } return mappingModel; } + private static void MapBodyData(Response response, MappingModel mappingModel) + { + if (response.ResponseMessage.BodyData != null) + { + switch (response.ResponseMessage.BodyData?.DetectedBodyType) + { + case BodyType.String: + mappingModel.Response.Body = response.ResponseMessage.BodyData.BodyAsString; + break; + + case BodyType.Json: + mappingModel.Response.BodyAsJson = response.ResponseMessage.BodyData.BodyAsJson; + mappingModel.Response.BodyAsJsonIndented = response.ResponseMessage.BodyData.BodyAsJsonIndented; + break; + + case BodyType.Bytes: + mappingModel.Response.BodyAsBytes = response.ResponseMessage.BodyData.BodyAsBytes; + break; + + case BodyType.File: + mappingModel.Response.BodyAsFile = response.ResponseMessage.BodyData.BodyAsFile; + mappingModel.Response.BodyAsFileIsCached = response.ResponseMessage.BodyData.BodyAsFileIsCached; + break; + } + + if (response.ResponseMessage.BodyData.Encoding != null && response.ResponseMessage.BodyData.Encoding.WebName != "utf-8") + { + mappingModel.Response.BodyEncoding = new EncodingModel + { + EncodingName = response.ResponseMessage.BodyData.Encoding.EncodingName, + CodePage = response.ResponseMessage.BodyData.Encoding.CodePage, + WebName = response.ResponseMessage.BodyData.Encoding.WebName + }; + } + } + } + private static IDictionary Map(IDictionary> dictionary) { if (dictionary == null || dictionary.Count == 0)