From 1bfc0876d75fda52f390fea5597b6388c1347aab Mon Sep 17 00:00:00 2001 From: Russ Cam Date: Thu, 20 Jun 2019 10:54:57 +1000 Subject: [PATCH] Advance reader when not expected JSON token This commit advances the JSON reader when a JSON token is one that is unexpected e.g. when the JSON token is null. --- .../Bucket/Terms/TermsExcludeFormatter.cs | 3 ++ .../Bucket/Terms/TermsIncludeFormatter.cs | 3 ++ .../PercentileRanksAggregationFormatter.cs | 3 ++ .../PercentilesAggregationFormatter.cs | 3 ++ .../MovingAverageAggregationFormatter.cs | 3 ++ .../Fields/FieldValuesFormatter.cs | 3 ++ .../Infer/IndexName/IndexNameFormatter.cs | 6 +++- .../Infer/Indices/IndicesFormatter.cs | 2 +- .../PropertyName/PropertyNameFormatter.cs | 2 +- .../RelationName/RelationNameFormatter.cs | 1 + .../LazyDocument/LazyDocumentFormatter.cs | 9 ++++-- ...ateTimeOffsetEpochMillisecondsFormatter.cs | 31 ++++++++++--------- .../JsonFormatters/IndicesBoostFormatter.cs | 1 + ...ableDateTimeOffsetEpochSecondsFormatter.cs | 3 ++ .../JsonFormatters/SortOrderFormatter.cs | 3 ++ .../Fuzziness/FuzzinessFormatter.cs | 4 ++- .../CommonOptions/Geo/DistanceFormatter.cs | 3 ++ .../Scripting/ScriptFormatter.cs | 3 ++ .../MultiTermQueryRewriteFormatter.cs | 3 ++ .../TermLevel/Fuzzy/FuzzyQueryFormatter.cs | 2 +- .../TermLevel/Terms/TermsQueryFormatter.cs | 3 ++ .../SuggestContextFormatter.cs | 2 +- 22 files changed, 73 insertions(+), 23 deletions(-) diff --git a/src/Nest/Aggregations/Bucket/Terms/TermsExcludeFormatter.cs b/src/Nest/Aggregations/Bucket/Terms/TermsExcludeFormatter.cs index e778b541a91..c19fa29afe7 100644 --- a/src/Nest/Aggregations/Bucket/Terms/TermsExcludeFormatter.cs +++ b/src/Nest/Aggregations/Bucket/Terms/TermsExcludeFormatter.cs @@ -10,7 +10,10 @@ public TermsExclude Deserialize(ref JsonReader reader, IJsonFormatterResolver fo { var token = reader.GetCurrentJsonToken(); if (token == JsonToken.Null) + { + reader.ReadNext(); return null; + } TermsExclude termsExclude; switch (token) diff --git a/src/Nest/Aggregations/Bucket/Terms/TermsIncludeFormatter.cs b/src/Nest/Aggregations/Bucket/Terms/TermsIncludeFormatter.cs index c7c9fa227e2..61d159d17e8 100644 --- a/src/Nest/Aggregations/Bucket/Terms/TermsIncludeFormatter.cs +++ b/src/Nest/Aggregations/Bucket/Terms/TermsIncludeFormatter.cs @@ -17,7 +17,10 @@ public TermsInclude Deserialize(ref JsonReader reader, IJsonFormatterResolver fo { var token = reader.GetCurrentJsonToken(); if (token == JsonToken.Null) + { + reader.ReadNext(); return null; + } TermsInclude termsInclude; switch (token) diff --git a/src/Nest/Aggregations/Metric/PercentileRanks/PercentileRanksAggregationFormatter.cs b/src/Nest/Aggregations/Metric/PercentileRanks/PercentileRanksAggregationFormatter.cs index 8865572885d..56ba203053c 100644 --- a/src/Nest/Aggregations/Metric/PercentileRanks/PercentileRanksAggregationFormatter.cs +++ b/src/Nest/Aggregations/Metric/PercentileRanks/PercentileRanksAggregationFormatter.cs @@ -23,7 +23,10 @@ internal class PercentileRanksAggregationFormatter : IJsonFormatter public FieldValues Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { if (reader.GetCurrentJsonToken() != JsonToken.BeginObject) + { + reader.ReadNextBlock(); return null; + } var count = 0; var fields = new Dictionary(); diff --git a/src/Nest/CommonAbstractions/Infer/IndexName/IndexNameFormatter.cs b/src/Nest/CommonAbstractions/Infer/IndexName/IndexNameFormatter.cs index 934e44ec469..38f5be8f876 100644 --- a/src/Nest/CommonAbstractions/Infer/IndexName/IndexNameFormatter.cs +++ b/src/Nest/CommonAbstractions/Infer/IndexName/IndexNameFormatter.cs @@ -6,7 +6,11 @@ internal class IndexNameFormatter : IJsonFormatter, IObjectPropertyNa { public IndexName Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { - if (reader.GetCurrentJsonToken() != JsonToken.String) return null; + if (reader.GetCurrentJsonToken() != JsonToken.String) + { + reader.ReadNextBlock(); + return null; + } IndexName indexName = reader.ReadString(); return indexName; diff --git a/src/Nest/CommonAbstractions/Infer/Indices/IndicesFormatter.cs b/src/Nest/CommonAbstractions/Infer/Indices/IndicesFormatter.cs index d355af16e55..91b750f2606 100644 --- a/src/Nest/CommonAbstractions/Infer/Indices/IndicesFormatter.cs +++ b/src/Nest/CommonAbstractions/Infer/Indices/IndicesFormatter.cs @@ -9,7 +9,7 @@ public Indices Deserialize(ref JsonReader reader, IJsonFormatterResolver formatt { if (reader.GetCurrentJsonToken() != JsonToken.BeginArray) { - reader.ReadNext(); + reader.ReadNextBlock(); return null; } diff --git a/src/Nest/CommonAbstractions/Infer/PropertyName/PropertyNameFormatter.cs b/src/Nest/CommonAbstractions/Infer/PropertyName/PropertyNameFormatter.cs index 1acb4494c2c..17feb3704be 100644 --- a/src/Nest/CommonAbstractions/Infer/PropertyName/PropertyNameFormatter.cs +++ b/src/Nest/CommonAbstractions/Infer/PropertyName/PropertyNameFormatter.cs @@ -8,7 +8,7 @@ public PropertyName Deserialize(ref JsonReader reader, IJsonFormatterResolver fo { if (reader.GetCurrentJsonToken() != JsonToken.String) { - reader.ReadNext(); + reader.ReadNextBlock(); return null; } diff --git a/src/Nest/CommonAbstractions/Infer/RelationName/RelationNameFormatter.cs b/src/Nest/CommonAbstractions/Infer/RelationName/RelationNameFormatter.cs index bc25e532b47..ead9ea1491e 100644 --- a/src/Nest/CommonAbstractions/Infer/RelationName/RelationNameFormatter.cs +++ b/src/Nest/CommonAbstractions/Infer/RelationName/RelationNameFormatter.cs @@ -12,6 +12,7 @@ public RelationName Deserialize(ref JsonReader reader, IJsonFormatterResolver fo return relationName; } + reader.ReadNextBlock(); return null; } diff --git a/src/Nest/CommonAbstractions/LazyDocument/LazyDocumentFormatter.cs b/src/Nest/CommonAbstractions/LazyDocument/LazyDocumentFormatter.cs index c2f4a8afe7a..e3fe90faada 100644 --- a/src/Nest/CommonAbstractions/LazyDocument/LazyDocumentFormatter.cs +++ b/src/Nest/CommonAbstractions/LazyDocument/LazyDocumentFormatter.cs @@ -25,7 +25,10 @@ public void Serialize(ref JsonWriter writer, ILazyDocument value, IJsonFormatter public ILazyDocument Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { if (reader.GetCurrentJsonToken() == JsonToken.Null) + { + reader.ReadNextBlock(); return null; + } var arraySegment = reader.ReadNextBlockSegment(); @@ -50,7 +53,7 @@ internal static void WriteUnindented(ref JsonReader reader, ref JsonWriter write var c = 0; while (reader.ReadIsInObject(ref c)) { - if (c != 1) + if (c != 1) writer.WriteRaw((byte)','); writer.WritePropertyName(reader.ReadPropertyName()); WriteUnindented(ref reader, ref writer); @@ -64,7 +67,7 @@ internal static void WriteUnindented(ref JsonReader reader, ref JsonWriter write var c = 0; while (reader.ReadIsInArray(ref c)) { - if (c != 1) + if (c != 1) writer.WriteRaw((byte)','); WriteUnindented(ref reader, ref writer); } @@ -108,7 +111,7 @@ public void Serialize(ref JsonWriter writer, LazyDocument value, IJsonFormatterR public LazyDocument Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { - if (reader.GetCurrentJsonToken() == JsonToken.Null) + if (reader.ReadIsNull()) return null; var arraySegment = reader.ReadNextBlockSegment(); diff --git a/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/DateTimeOffsetEpochMillisecondsFormatter.cs b/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/DateTimeOffsetEpochMillisecondsFormatter.cs index f0b9b06e251..7a7c17966fd 100644 --- a/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/DateTimeOffsetEpochMillisecondsFormatter.cs +++ b/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/DateTimeOffsetEpochMillisecondsFormatter.cs @@ -18,22 +18,25 @@ internal class NullableDateTimeOffsetEpochMillisecondsFormatter : IJsonFormatter { var token = reader.GetCurrentJsonToken(); - if (token == JsonToken.String) + switch (token) { - var formatter = formatterResolver.GetFormatter(); - return formatter.Deserialize(ref reader, formatterResolver); + case JsonToken.String: + { + var formatter = formatterResolver.GetFormatter(); + return formatter.Deserialize(ref reader, formatterResolver); + } + case JsonToken.Null: + reader.ReadNext(); + return null; + case JsonToken.Number: + { + var millisecondsSinceEpoch = reader.ReadDouble(); + var dateTimeOffset = DateTimeUtil.Epoch.AddMilliseconds(millisecondsSinceEpoch); + return dateTimeOffset; + } + default: + throw new Exception($"Cannot deserialize {nameof(DateTimeOffset)} from token {token}"); } - if (token == JsonToken.Null) - return null; - - if (token == JsonToken.Number) - { - var millisecondsSinceEpoch = reader.ReadDouble(); - var dateTimeOffset = DateTimeUtil.Epoch.AddMilliseconds(millisecondsSinceEpoch); - return dateTimeOffset; - } - - throw new Exception($"Cannot deserialize {nameof(DateTimeOffset)} from token {token}"); } public void Serialize(ref JsonWriter writer, DateTimeOffset? value, IJsonFormatterResolver formatterResolver) diff --git a/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/IndicesBoostFormatter.cs b/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/IndicesBoostFormatter.cs index 8dc8b51d857..4548aa10ea0 100644 --- a/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/IndicesBoostFormatter.cs +++ b/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/IndicesBoostFormatter.cs @@ -52,6 +52,7 @@ public IDictionary Deserialize(ref JsonReader reader, IJsonFo } return dictionary; default: + reader.ReadNextBlock(); return null; } } diff --git a/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/NullableDateTimeOffsetEpochSecondsFormatter.cs b/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/NullableDateTimeOffsetEpochSecondsFormatter.cs index bc650ea75ec..37c0e5c6617 100644 --- a/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/NullableDateTimeOffsetEpochSecondsFormatter.cs +++ b/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/NullableDateTimeOffsetEpochSecondsFormatter.cs @@ -8,7 +8,10 @@ internal class NullableDateTimeOffsetEpochSecondsFormatter : IJsonFormatter : IJsonFormatter public TSortOrder Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { if (reader.GetCurrentJsonToken() != JsonToken.BeginObject) + { + reader.ReadNextBlock(); return null; + } var count = 0; var sortOrder = new TSortOrder(); diff --git a/src/Nest/CommonOptions/Fuzziness/FuzzinessFormatter.cs b/src/Nest/CommonOptions/Fuzziness/FuzzinessFormatter.cs index f754679c17e..66bc572b413 100644 --- a/src/Nest/CommonOptions/Fuzziness/FuzzinessFormatter.cs +++ b/src/Nest/CommonOptions/Fuzziness/FuzzinessFormatter.cs @@ -70,7 +70,8 @@ public Fuzziness Deserialize(ref JsonReader reader, IJsonFormatterResolver forma var high = NumberConverter.ReadInt32(rawAuto.Array, commaIndex + 1, out _); return Fuzziness.AutoLength(low, high); } - case JsonToken.Number: { + case JsonToken.Number: + { var value = reader.ReadNumberSegment(); if (value.IsDouble()) @@ -85,6 +86,7 @@ public Fuzziness Deserialize(ref JsonReader reader, IJsonFormatterResolver forma } } default: + reader.ReadNextBlock(); return null; } } diff --git a/src/Nest/CommonOptions/Geo/DistanceFormatter.cs b/src/Nest/CommonOptions/Geo/DistanceFormatter.cs index c2623238bd8..ccea15d1bbc 100644 --- a/src/Nest/CommonOptions/Geo/DistanceFormatter.cs +++ b/src/Nest/CommonOptions/Geo/DistanceFormatter.cs @@ -7,7 +7,10 @@ internal class DistanceFormatter : IJsonFormatter public Distance Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { if (reader.GetCurrentJsonToken() != JsonToken.String) + { + reader.ReadNextBlock(); return null; + } var value = reader.ReadString(); return value == null diff --git a/src/Nest/CommonOptions/Scripting/ScriptFormatter.cs b/src/Nest/CommonOptions/Scripting/ScriptFormatter.cs index 1c3453add1b..9f0f09ae5c2 100644 --- a/src/Nest/CommonOptions/Scripting/ScriptFormatter.cs +++ b/src/Nest/CommonOptions/Scripting/ScriptFormatter.cs @@ -20,7 +20,10 @@ internal class ScriptFormatter : IJsonFormatter public IScript Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { if (reader.GetCurrentJsonToken() != JsonToken.BeginObject) + { + reader.ReadNextBlock(); return null; + } var count = 0; IScript script = null; diff --git a/src/Nest/QueryDsl/MultiTermQueryRewrite/MultiTermQueryRewriteFormatter.cs b/src/Nest/QueryDsl/MultiTermQueryRewrite/MultiTermQueryRewriteFormatter.cs index 522b6b5ce68..696f8d6f14e 100644 --- a/src/Nest/QueryDsl/MultiTermQueryRewrite/MultiTermQueryRewriteFormatter.cs +++ b/src/Nest/QueryDsl/MultiTermQueryRewrite/MultiTermQueryRewriteFormatter.cs @@ -10,7 +10,10 @@ public MultiTermQueryRewrite Deserialize(ref JsonReader reader, IJsonFormatterRe var token = reader.GetCurrentJsonToken(); if (token == JsonToken.Null) + { + reader.ReadNext(); return null; + } if (token != JsonToken.String) throw new Exception($"Invalid token type {token} to deserialize {nameof(MultiTermQueryRewrite)} from"); diff --git a/src/Nest/QueryDsl/TermLevel/Fuzzy/FuzzyQueryFormatter.cs b/src/Nest/QueryDsl/TermLevel/Fuzzy/FuzzyQueryFormatter.cs index 29fdc2a98f5..252a5a748a5 100644 --- a/src/Nest/QueryDsl/TermLevel/Fuzzy/FuzzyQueryFormatter.cs +++ b/src/Nest/QueryDsl/TermLevel/Fuzzy/FuzzyQueryFormatter.cs @@ -50,7 +50,7 @@ public override void SerializeInternal(ref JsonWriter writer, IFuzzyQuery value, public override IFuzzyQuery Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { - if (reader.GetCurrentJsonToken() == JsonToken.Null) + if (reader.ReadIsNull()) return null; var count = 0; diff --git a/src/Nest/QueryDsl/TermLevel/Terms/TermsQueryFormatter.cs b/src/Nest/QueryDsl/TermLevel/Terms/TermsQueryFormatter.cs index a92be83ce41..04397685f61 100644 --- a/src/Nest/QueryDsl/TermLevel/Terms/TermsQueryFormatter.cs +++ b/src/Nest/QueryDsl/TermLevel/Terms/TermsQueryFormatter.cs @@ -27,7 +27,10 @@ internal class TermsQueryFormatter : IJsonFormatter public ITermsQuery Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { if (reader.GetCurrentJsonToken() != JsonToken.BeginObject) + { + reader.ReadNextBlock(); return null; + } ITermsQuery query = new TermsQuery(); var count = 0; diff --git a/src/Nest/Search/Suggesters/ContextSuggester/SuggestContextFormatter.cs b/src/Nest/Search/Suggesters/ContextSuggester/SuggestContextFormatter.cs index 2fba6ba75d4..340e52e94dd 100644 --- a/src/Nest/Search/Suggesters/ContextSuggester/SuggestContextFormatter.cs +++ b/src/Nest/Search/Suggesters/ContextSuggester/SuggestContextFormatter.cs @@ -15,7 +15,7 @@ internal class SuggestContextFormatter : IJsonFormatter public ISuggestContext Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { - if (reader.GetCurrentJsonToken() == JsonToken.Null) + if (reader.ReadIsNull()) return null; var segment = reader.ReadNextBlockSegment();