using System;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using StardewModdingAPI.Toolkit;
namespace StardewModdingAPI.Web.Framework
{
/// Constrains a route value to a valid semantic version.
internal class VersionConstraint : IRouteConstraint
{
/*********
** Public methods
*********/
/// Get whether the URL parameter contains a valid value for this constraint.
/// An object that encapsulates information about the HTTP request.
/// The router that this constraint belongs to.
/// The name of the parameter that is being checked.
/// A dictionary that contains the parameters for the URL.
/// An object that indicates whether the constraint check is being performed when an incoming request is being handled or when a URL is being generated.
/// true if the URL parameter contains a valid value; otherwise, false.
public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
{
if (routeKey == null)
throw new ArgumentNullException(nameof(routeKey));
if (values == null)
throw new ArgumentNullException(nameof(values));
return
values.TryGetValue(routeKey, out object routeValue)
&& routeValue is string routeStr
&& SemanticVersion.TryParse(routeStr, allowNonStandard: true, out _);
}
}
}