tools/Elastic.CommonSchema.Generator/Views/PropertiesReaderJsonConverterBase.Generated.cshtml (76 lines of code) (raw):
@using System.Collections.Generic
@using System.Linq
@inherits Elastic.CommonSchema.Generator.Views.CodeTemplatePage<Elastic.CommonSchema.Generator.Projection.CommonSchemaTypesProjection>
// Licensed to Elasticsearch B.V under one or more agreements.
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information
/*
IMPORTANT NOTE
==============
This file has been generated.
If you wish to submit a PR please modify the original csharp file and submit the PR with that change. Thanks!
*/
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Elastic.CommonSchema.Serialization;
@foreach (var kv in Model.EntitiesWithPropertiesAtRoot)
{
var entity = kv.Key;
<text>
/// <summary> Specialized converter for <see cref="@(entity.Name)"/> </summary>
internal partial class @(entity.Name)EntityJsonConverter : PropertiesReaderJsonConverterBase@(Raw("<"))@(entity.Name)@Raw(">")
{
/// <inheritdoc cref="PropertiesReaderJsonConverterBase{T}.ReadProperties"/>
protected override bool ReadProperties(ref Utf8JsonReader reader, @entity.Name ecsEvent, JsonSerializerOptions options)
{
var propertyName = reader.GetString();
reader.Read();
return propertyName switch
{
@foreach (var property in entity.BaseFieldSet.ValueProperties)
{
var name = property.JsonProperty;
<text> "@(name)" => ReadProp@(Raw(property.ReadJsonType))(ref reader, "@name", ecsEvent, (b, v) => b.@(property.Name) = v),
</text>
}
@foreach (var property in entity.BaseFieldSet.InlineObjectProperties)
{
var name = property.JsonProperty;
<text> "@(name)" => ReadProp<@(Raw(property.InlineObject.Name))>(ref reader, "@name", ecsEvent, (b, v) => b.@(property.Name) = v, options),
</text>
}
_ => ReadProperty(ref reader, propertyName, ecsEvent, options)
};
}
private partial bool ReadProperty(ref Utf8JsonReader reader, string propertyName, @entity.Name ecsEvent, JsonSerializerOptions options);
/// <inheritdoc cref="JsonConverter{T}.Write"/>
public override void Write(Utf8JsonWriter writer, @entity.Name value, JsonSerializerOptions options)
{
if (value == null || !value.ShouldSerialize)
{
writer.WriteNullValue();
return;
}
writer.WriteStartObject();
@foreach (var field in entity.BaseFieldSet.ValueProperties)
{
if (kv.Value.Contains(field.JsonProperty))
{
continue;
}
<text> WriteProp@(Raw(field.ReadJsonType))(writer, "@field.JsonProperty", value.@field.Name);
</text>
}
@foreach (var property in entity.BaseFieldSet.InlineObjectProperties)
{
var name = property.JsonProperty;
<text> WriteProp(writer, "@(name)", value.@(property.Name), options);
</text>
}
writer.WriteEndObject();
}
}
</text>
}