Example #1
0
        private void MapProperty(SelectorExpression.PropertyBag properties, IParser reader, Func <IParser, Type, object> nestedObjectDeserializer, out string name)
        {
            name = null;
            while (reader.TryConsume(out Scalar scalar))
            {
                string key = scalar.Value;
                if (TryCondition(key) || TryOperator(key))
                {
                    name = key;
                }

                if (reader.TryConsume(out scalar))
                {
                    properties[key] = scalar.Value;
                }
                else if (TryCondition(key) && reader.TryConsume <SequenceStart>(out _))
                {
                    var objects = new List <string>();
                    while (!reader.TryConsume <SequenceEnd>(out _))
                    {
                        if (reader.TryConsume(out scalar))
                        {
                            objects.Add(scalar.Value);
                        }
                    }
                    properties[key] = objects.ToArray();
                }
            }
        }
Example #2
0
 private SelectorExpression MapCondition(string type, SelectorExpression.PropertyBag properties, IParser reader, Func <IParser, Type, object> nestedObjectDeserializer)
 {
     if (TryExpression(reader, type, nestedObjectDeserializer, out SelectorCondition result))
     {
         while (!reader.Accept(out MappingEnd end))
         {
             MapProperty(properties, reader, nestedObjectDeserializer, out _);
         }
         result.Add(properties);
     }
     return(result);
 }
Example #3
0
        private SelectorExpression MapExpression(IParser reader, Func <IParser, Type, object> nestedObjectDeserializer)
        {
            SelectorExpression result = null;
            var properties            = new SelectorExpression.PropertyBag();

            MapProperty(properties, reader, nestedObjectDeserializer, out string key);
            if (key != null && TryCondition(key))
            {
                result = MapCondition(key, properties, reader, nestedObjectDeserializer);
            }
            else if (TryOperator(key) && reader.Accept(out MappingStart mapping))
            {
                result = MapOperator(key, reader, nestedObjectDeserializer);
            }
            else if (TryOperator(key) && reader.Accept(out SequenceStart sequence))
            {
                result = MapOperator(key, reader, nestedObjectDeserializer);
            }
            return(result);
        }