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(); } } }
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); }
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); }