using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using JetBrains.Annotations; using Stef.Validation; using WireMock.Exceptions; using WireMock.Logging; using WireMock.Server; using WireMock.Settings; namespace WireMock.Net.StandAlone; /// /// The StandAloneApp /// public static class StandAloneApp { private static readonly string Version = typeof(StandAloneApp).GetTypeInfo().Assembly.GetName().Version!.ToString(); /// /// Start WireMock.Net standalone Server based on the WireMockServerSettings. /// /// The WireMockServerSettings [PublicAPI] public static WireMockServer Start(WireMockServerSettings settings) { Guard.NotNull(settings, nameof(settings)); var server = WireMockServer.Start(settings); settings.Logger?.Info("Version [{0}]", Version); settings.Logger?.Info("Server listening at {0}", string.Join(",", server.Urls)); return server; } /// /// Start WireMock.Net standalone Server based on the commandline arguments. /// /// The commandline arguments /// The logger [PublicAPI] public static WireMockServer Start(string[] args, IWireMockLogger? logger = null) { Guard.NotNull(args, nameof(args)); if (TryStart(args, out var server, logger)) { return server; } throw new WireMockException($"Unable start start {nameof(WireMockServer)}."); } /// /// Try to start WireMock.Net standalone Server based on the commandline arguments. /// /// The commandline arguments /// The logger /// The WireMockServer [PublicAPI] public static bool TryStart(string[] args, [NotNullWhen(true)] out WireMockServer? server, IWireMockLogger? logger = null) { Guard.NotNull(args, nameof(args)); if (WireMockServerSettingsParser.TryParseArguments(args, out var settings, logger)) { settings.Logger?.Info("Version [{0}]", Version); settings.Logger?.Debug("Server arguments [{0}]", string.Join(", ", args.Select(a => $"'{a}'"))); server = Start(settings); return true; } server = null; return false; } }