public static PipelineContextData ToContextData(this TemplateToken token)
        {
            switch (token.Type)
            {
            case TokenType.Mapping:
                var mapping    = token as MappingToken;
                var dictionary = new DictionaryContextData();
                if (mapping.Count > 0)
                {
                    foreach (var pair in mapping)
                    {
                        var keyLiteral = pair.Key.AssertString("dictionary context data key");
                        var key        = keyLiteral.Value;
                        var value      = pair.Value.ToContextData();
                        dictionary.Add(key, value);
                    }
                }
                return(dictionary);

            case TokenType.Sequence:
                var sequence = token as SequenceToken;
                var array    = new ArrayContextData();
                if (sequence.Count > 0)
                {
                    foreach (var item in sequence)
                    {
                        array.Add(item.ToContextData());
                    }
                }
                return(array);

            case TokenType.Null:
                return(null);

            case TokenType.Boolean:
                var boolean = token as BooleanToken;
                return(new BooleanContextData(boolean.Value));

            case TokenType.Number:
                var number = token as NumberToken;
                return(new NumberContextData(number.Value));

            case TokenType.String:
                var stringToken = token as StringToken;
                return(new StringContextData(stringToken.Value));

            default:
                throw new NotSupportedException($"Unexpected {nameof(TemplateToken)} type '{token.Type}'");
            }
        }
Example #2
0
        public static PipelineContextData ToPipelineContextData(
            this JToken value,
            Int32 depth,
            Int32 maxDepth)
        {
            if (depth < maxDepth)
            {
                if (value.Type == JTokenType.String)
                {
                    return(new StringContextData((String)value));
                }
                else if (value.Type == JTokenType.Boolean)
                {
                    return(new BooleanContextData((Boolean)value));
                }
                else if (value.Type == JTokenType.Float || value.Type == JTokenType.Integer)
                {
                    return(new NumberContextData((Double)value));
                }
                else if (value.Type == JTokenType.Object)
                {
                    var subContext = new DictionaryContextData();
                    var obj        = (JObject)value;
                    foreach (var property in obj.Properties())
                    {
                        subContext[property.Name] = ToPipelineContextData(property.Value, depth + 1, maxDepth);
                    }
                    return(subContext);
                }
                else if (value.Type == JTokenType.Array)
                {
                    var arrayContext = new ArrayContextData();
                    var arr          = (JArray)value;
                    foreach (var element in arr)
                    {
                        arrayContext.Add(ToPipelineContextData(element, depth + 1, maxDepth));
                    }
                    return(arrayContext);
                }
                else if (value.Type == JTokenType.Null)
                {
                    return(null);
                }
            }

            // We don't understand the type or have reached our max, return as string
            return(new StringContextData(value.ToString()));
        }