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 <jonskeet@google.com>
This commit is contained in:
Jon Skeet 2021-03-25 08:15:34 +00:00 committed by Jon Skeet
parent d840bc26c9
commit 08593b80a7
1 changed files with 10 additions and 15 deletions

View File

@ -108,8 +108,8 @@ namespace CloudNative.CloudEvents.SystemTextJson
DocumentOptions = documentOptions;
}
public override Task<CloudEvent> DecodeStructuredModeMessageAsync(Stream data, ContentType contentType, IEnumerable<CloudEventAttribute> extensionAttributes) =>
DecodeStructuredModeMessageImpl(data, contentType, extensionAttributes, true);
public override async Task<CloudEvent> DecodeStructuredModeMessageAsync(Stream data, ContentType contentType, IEnumerable<CloudEventAttribute> extensionAttributes) =>
await DecodeStructuredModeMessageImpl(data, contentType, extensionAttributes, true).ConfigureAwait(false);
public override CloudEvent DecodeStructuredModeMessage(Stream data, ContentType contentType, IEnumerable<CloudEventAttribute> 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
{