コード例 #1
0
ファイル: JsonMatchEngine.cs プロジェクト: isabella232/ccme
        private IEnumerable <Match> MatchSingleValue(JValue input, JValue pattern)
        {
            switch (pattern.Type)
            {
            case JTokenType.String:
                var patternValue = pattern.Value <string>();
                if (PlaceholderHelper.IsPlaceholder(patternValue, out var placeholder))
                {
                    return(MatchCollectionHelper.CreateWithSingleGroup(new CapturingGroup
                    {
                        Key = placeholder,
                        Value = (input as JValue).GetPrimitiveAsObject(),
                        Path = input.Path
                    }));
                }
                else
                {
                    return(string.Equals(input.Value <string>(), PlaceholderHelper.Unescape(patternValue), this.stringComparison) ? MatchCollectionHelper.CreateWithEmptyMatch() : null);
                }

            case JTokenType.Integer:
                return(input.Value <long>() == pattern.Value <long>() ? MatchCollectionHelper.CreateWithEmptyMatch() : null);

            case JTokenType.Boolean:
                return(input.Value <bool>() == pattern.Value <bool>() ? MatchCollectionHelper.CreateWithEmptyMatch() : null);

            default:
                throw new NotSupportedJTokenTypeException(pattern);
            }
        }
コード例 #2
0
ファイル: JsonMatchEngine.cs プロジェクト: isabella232/ccme
        private IEnumerable <Match> MatchSingleLevel(JToken input, JToken pattern)
        {
            if (pattern is JValue)
            {
                return(this.MatchSingleValue(input as JValue, pattern as JValue));
            }

            if (pattern is JArray)
            {
                var patternArray = pattern as JArray;

                if (input is JArray)
                {
                    if (patternArray.Count == 1)
                    {
                        return(this.MatchArraySinglePattern(input as JArray, patternArray.Single()));
                    }
                    else
                    {
                        throw new NotSupportedArrayToArrayMatchException(input, pattern);
                    }
                }
                else
                {
                    return(this.MatchArraySingleInput(input, patternArray));
                }
            }

            if (pattern is JObject)
            {
                var matches = MatchCollectionHelper.CreateWithEmptyMatch();
                foreach (var propertyPattern in pattern.Children <JProperty>())
                {
                    if (input.Type == JTokenType.Null)
                    {
                        return(null);
                    }

                    var childInput = input[propertyPattern.Name];
                    if (childInput == null)
                    {
                        return(null);
                    }

                    var subMatches = this.MatchSingleLevel(childInput, propertyPattern.Value);
                    if (subMatches == null)
                    {
                        return(null);
                    }

                    matches = matches.Multiply(subMatches);
                }

                return(matches);
            }

            throw new NotSupportedJTokenTypeException(pattern);
        }