public static UriTemplatePathSegment CreateFromUriTemplate(string segment, UriTemplate template)
        {
            // Identifying the type of segment - Literal|Compound|Variable
            switch (UriTemplateHelpers.IdentifyPartType(segment))
            {
            case UriTemplatePartType.Literal:
                return(UriTemplateLiteralPathSegment.CreateFromUriTemplate(segment, template));

            case UriTemplatePartType.Compound:
                return(UriTemplateCompoundPathSegment.CreateFromUriTemplate(segment, template));

            case UriTemplatePartType.Variable:
                if (segment.EndsWith("/", StringComparison.Ordinal))
                {
                    var varName = template.AddPathVariable(UriTemplatePartType.Variable,
                                                           segment.Substring(1, segment.Length - 3));
                    return(new UriTemplateVariablePathSegment(segment, true, varName));
                }
                else
                {
                    var varName = template.AddPathVariable(UriTemplatePartType.Variable,
                                                           segment.Substring(1, segment.Length - 2));
                    return(new UriTemplateVariablePathSegment(segment, false, varName));
                }

            default:
                throw new Exception("Invalid value from IdentifyStringNature");
            }
        }
 public override bool IsMatch(UriTemplateLiteralPathSegment segment, bool ignoreTrailingSlash)
 {
     if (!ignoreTrailingSlash && (EndsWithSlash != segment.EndsWithSlash))
     {
         return(false);
     }
     return(TryLookup(segment.AsUnescapedString(), null));
 }
 public override bool IsMatch(UriTemplateLiteralPathSegment segment, bool ignoreTrailingSlash)
 {
     if (!ignoreTrailingSlash && (EndsWithSlash != segment.EndsWithSlash))
     {
         return(false);
     }
     return(!segment.IsNullOrEmpty());
 }
 public abstract bool IsMatch(UriTemplateLiteralPathSegment segment, bool ignoreTrailingSlash);
 public bool IsMatch(UriTemplateLiteralPathSegment segment)
 {
     return(IsMatch(segment, false));
 }