// Copyright © WireMock.Net using System; using System.Linq; using Stef.Validation; namespace WireMock.Matchers.Request; /// /// The request HTTP Version matcher. /// public class RequestMessageHttpVersionMatcher : IRequestMatcher { /// /// The matcher. /// public IStringMatcher? Matcher { get; } /// /// The func. /// public Func? Func { get; } /// /// The /// public MatchBehaviour Behaviour { get; } /// /// The HTTP Version /// public string? HttpVersion { get; } /// /// Initializes a new instance of the class. /// /// The match behaviour. /// The HTTP Version. public RequestMessageHttpVersionMatcher(MatchBehaviour matchBehaviour, string httpVersion) : this(matchBehaviour, new ExactMatcher(matchBehaviour, httpVersion)) { HttpVersion = httpVersion; Behaviour = matchBehaviour; } /// /// Initializes a new instance of the class. /// /// The match behaviour. /// The matcher. public RequestMessageHttpVersionMatcher(MatchBehaviour matchBehaviour, IStringMatcher matcher) { Matcher = Guard.NotNull(matcher); Behaviour = matchBehaviour; HttpVersion = matcher.GetPatterns().FirstOrDefault(); } /// /// Initializes a new instance of the class. /// /// The function. public RequestMessageHttpVersionMatcher(Func func) { Func = Guard.NotNull(func); } /// public double GetMatchingScore(IRequestMessage requestMessage, IRequestMatchResult requestMatchResult) { var (score, exception) = GetMatchResult(requestMessage).Expand(); return requestMatchResult.AddScore(GetType(), score, exception); } private MatchResult GetMatchResult(IRequestMessage requestMessage) { if (Matcher != null) { return Matcher.IsMatch(requestMessage.HttpVersion); } if (Func != null) { return MatchScores.ToScore(Func(requestMessage.HttpVersion)); } return default; } }