in tools/Elastic.CommonSchema.Generator/Projection/PropertyReference.cs [8:77]
public abstract class PropertyReference(Field field, string localPath, string fullPath)
{
protected string LocalPath { get; } = localPath;
public string FullPath { get; } = fullPath;
public string LogTemplateAlternative => FullPath.PascalCase();
public string JsonProperty => FullPath.GetLocalProperty(LocalPath);
public string Name => JsonProperty.PascalCase();
public virtual bool IsArray { get; } = field?.Normalize.Contains("array") ?? false;
public virtual string Description { get; } = GetFieldDescription(field);
public virtual string Example { get; } = NormalizeDescription(field?.Example?.ToString() ?? string.Empty);
public virtual string ClrType { get; } = field?.GetClrType();
public virtual bool IsAssignable => !IsArray && !string.IsNullOrWhiteSpace(ClrType);
protected static string NormalizeDescription(string description)
{
if (description == null) return string.Empty;
var multiLineDescription = Regex.Replace(description, @"\n", "\r\n /// ");
multiLineDescription = multiLineDescription.Replace("<", "<").Replace(">", ">");
multiLineDescription = multiLineDescription.Replace("ATT&CK", "ATT&CK");
return multiLineDescription;
}
/// <summary>
/// <list type="bullet">
/// <item>a</item>
/// </list>
/// </summary>
/// <param name="field"></param>
/// <returns></returns>
private static string GetFieldDescription(Field field)
{
if (field == null) return string.Empty;
var multiLineDescription = NormalizeDescription(field.Description);
var description = $@"{multiLineDescription}";
if (!field.Indexed.GetValueOrDefault(true))
description += "\r\n /// <para><br/>Stored but not available for search in Elasticsearch by default</para>";
if (!string.IsNullOrEmpty(field.Beta))
description += $"\r\n /// <para><br/>{field.Beta}</para>";
if (!string.IsNullOrEmpty(field.IsRequired))
description += $"\r\n /// <para><br/>This is a required field</para>";
if (!string.IsNullOrEmpty(field.Pattern))
description += $"\r\n /// <para>pattern: {field.Indexed}</para>";
if (field.AllowedValues?.Count > 0)
{
description += $"\r\n /// <para><br/>Allowed Values:</para>";
description += "\r\n /// <list type=\"table\">";
description += $"\r\n /// <listheader><term>Value</term><description>Description</description></listheader>";
foreach (var v in field.AllowedValues)
{
var ml = NormalizeDescription(v.Description);
description += $"\r\n /// <item><term>{v.Name}</term><description>{ml}</description></item>";
}
description += "\r\n /// </list>";
}
if (field.ExpectedValues?.Count > 0)
{
description += $"\r\n /// <para><br/>Expected Values:</para>";
description += "\r\n /// <list type=\"bullet\">";
foreach (var value in field.ExpectedValues)
description += $"\r\n /// <item>{value}</item>";
description += "\r\n /// </list>";
}
return description;
}
}