private IAggregate GetMultiBucketAggregate(ref JsonReader reader, IJsonFormatterResolver formatterResolver, ref ArraySegment <byte> propertyName ) { var bucket = new BucketAggregate(); if (propertyName.EqualsBytes(DocCountErrorUpperBound)) { bucket.DocCountErrorUpperBound = reader.ReadNullableLong(); reader.ReadIsValueSeparatorWithVerify(); propertyName = reader.ReadPropertyNameSegmentRaw(); } if (propertyName.EqualsBytes(SumOtherDocCount)) { bucket.SumOtherDocCount = reader.ReadNullableLong(); reader.ReadIsValueSeparatorWithVerify(); reader.ReadNext(); // "buckets" reader.ReadNext(); // : } var items = new List <IBucket>(); var count = 0; var token = reader.GetCurrentJsonToken(); if (token == JsonToken.BeginObject) { var filterAggregates = new Dictionary <string, IAggregate>(); while (reader.ReadIsInObject(ref count)) { var name = reader.ReadPropertyName(); var innerAgg = ReadAggregate(ref reader, formatterResolver); filterAggregates[name] = innerAgg; } return(new FiltersAggregate(filterAggregates)); } while (reader.ReadIsInArray(ref count)) { var item = ReadBucket(ref reader, formatterResolver); items.Add(item); } bucket.Items = items; reader.ReadNext(); // close outer } return(bucket); }
private IAggregate GetMultiBucketAggregate(ref JsonReader reader, IJsonFormatterResolver formatterResolver, ref ArraySegment <byte> propertyName, IReadOnlyDictionary <string, object> meta) { var bucket = new BucketAggregate { Meta = meta }; if (propertyName.EqualsBytes(DocCountErrorUpperBound)) { bucket.DocCountErrorUpperBound = reader.ReadNullableLong(); reader.ReadIsValueSeparatorWithVerify(); propertyName = reader.ReadPropertyNameSegmentRaw(); } if (propertyName.EqualsBytes(SumOtherDocCount)) { bucket.SumOtherDocCount = reader.ReadNullableLong(); reader.ReadIsValueSeparatorWithVerify(); reader.ReadNext(); // "buckets" reader.ReadNext(); // : } var items = new List <IBucket>(); bucket.Items = items; var count = 0; var token = reader.GetCurrentJsonToken(); if (token == JsonToken.BeginObject) { var filterAggregates = new Dictionary <string, IAggregate>(); while (reader.ReadIsInObject(ref count)) { var name = reader.ReadPropertyName(); var innerAgg = ReadAggregate(ref reader, formatterResolver); filterAggregates[name] = innerAgg; } return(new FiltersAggregate(filterAggregates) { Meta = meta }); } while (reader.ReadIsInArray(ref count)) { var item = ReadBucket(ref reader, formatterResolver); items.Add(item); } token = reader.GetCurrentJsonToken(); if (token == JsonToken.ValueSeparator) { reader.ReadNext(); propertyName = reader.ReadPropertyNameSegmentRaw(); if (propertyName.EqualsBytes(JsonWriter.GetEncodedPropertyNameWithoutQuotation("interval"))) { bucket.Interval = formatterResolver.GetFormatter <DateMathTime>().Deserialize(ref reader, formatterResolver); } else { // skip for now reader.ReadNextBlock(); } } return(bucket); }