From 08593b80a7080c45954073372f95d006e3b6e765 Mon Sep 17 00:00:00 2001 From: Jon Skeet Date: Thu, 25 Mar 2021 08:15:34 +0000 Subject: [PATCH] Minor tweaks to System.Text.Json event formatter - Make PopulateDataFromStructuredEvent clearer via new local variables - Make DecodeStructuredModeMessageAsync async rather than returning the task directly Signed-off-by: Jon Skeet --- .../JsonEventFormatter.cs | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/CloudNative.CloudEvents.SystemTextJson/JsonEventFormatter.cs b/src/CloudNative.CloudEvents.SystemTextJson/JsonEventFormatter.cs index cac491b..bdeec5c 100644 --- a/src/CloudNative.CloudEvents.SystemTextJson/JsonEventFormatter.cs +++ b/src/CloudNative.CloudEvents.SystemTextJson/JsonEventFormatter.cs @@ -108,8 +108,8 @@ namespace CloudNative.CloudEvents.SystemTextJson DocumentOptions = documentOptions; } - public override Task DecodeStructuredModeMessageAsync(Stream data, ContentType contentType, IEnumerable extensionAttributes) => - DecodeStructuredModeMessageImpl(data, contentType, extensionAttributes, true); + public override async Task DecodeStructuredModeMessageAsync(Stream data, ContentType contentType, IEnumerable extensionAttributes) => + await DecodeStructuredModeMessageImpl(data, contentType, extensionAttributes, true).ConfigureAwait(false); public override CloudEvent DecodeStructuredModeMessage(Stream data, ContentType contentType, IEnumerable extensionAttributes) => DecodeStructuredModeMessageImpl(data, contentType, extensionAttributes, false).GetAwaiter().GetResult(); @@ -240,31 +240,26 @@ namespace CloudNative.CloudEvents.SystemTextJson { // Fetch data and data_base64 tokens, and treat null as missing. document.RootElement.TryGetProperty(DataPropertyName, out var dataElement); - if (dataElement is JsonElement { ValueKind: JsonValueKind.Null }) - { - dataElement = new JsonElement(); - } - document.RootElement.TryGetProperty(DataBase64PropertyName, out var dataBase64Token); - if (dataBase64Token is JsonElement { ValueKind: JsonValueKind.Null }) - { - dataBase64Token = new JsonElement(); - } + document.RootElement.TryGetProperty(DataBase64PropertyName, out var dataBase64Element); + + bool dataPresent = dataElement.ValueKind != JsonValueKind.Null && dataElement.ValueKind != JsonValueKind.Undefined; + bool dataBase64Present = dataBase64Element.ValueKind != JsonValueKind.Null && dataBase64Element.ValueKind != JsonValueKind.Undefined; // If we don't have any data, we're done. - if (dataElement.ValueKind == JsonValueKind.Undefined && dataBase64Token.ValueKind == JsonValueKind.Undefined) + if (!dataPresent && !dataBase64Present) { return; } // We can't handle both properties being set. - if (dataElement.ValueKind != JsonValueKind.Undefined && dataBase64Token.ValueKind != JsonValueKind.Undefined) + if (dataPresent && dataBase64Present) { throw new ArgumentException($"Structured mode content cannot contain both '{DataPropertyName}' and '{DataBase64PropertyName}' properties."); } // Okay, we have exactly one non-null data/data_base64 property. // Decode it, potentially using overridden methods for specialization. - if (dataBase64Token.ValueKind != JsonValueKind.Undefined) + if (dataBase64Present) { - DecodeStructuredModeDataBase64Property(dataBase64Token, cloudEvent); + DecodeStructuredModeDataBase64Property(dataBase64Element, cloudEvent); } else {