in src/TemplateRefGenerator/Generators/ChangelogGenerator.cs [272:328]
private static IEnumerable<string> GetUpdates(ResourceTypeChangeLog resourceTypeChange, VersionedChangeLog versionedChange, IEnumerable<NamedTypeChangeLog> changes)
{
var resourceType = resourceTypeChange.ResourceType;
var version = versionedChange.Version;
foreach (var change in changes.OrderBy(x => x.Name, StringComparer.OrdinalIgnoreCase))
{
if (change.Before is null || change.After is null)
{
// ignore additions & deletions - this is just to log updates
continue;
}
switch ((change.Before, change.After))
{
case (ObjectType beforeObj, ObjectType afterObj):
foreach (var (beforeProp, afterProp) in GetObjectPropertyChanges(resourceTypeChange, versionedChange, beforeObj.Properties, afterObj.Properties))
{
if (beforeProp is null && afterProp is {})
{
yield return $"""
* {GetTypeLink(resourceType, version, change.Name)}: Added property '{afterProp}'
""";
}
if (beforeProp is {} && afterProp is null)
{
yield return $"""
* {GetTypeLink(resourceType, version, change.Name)}: Removed property '{beforeProp}'
""";
}
}
break;
case (DiscriminatedObjectType beforeDisc, DiscriminatedObjectType afterDisc):
foreach (var (beforeProp, afterProp) in GetObjectPropertyChanges(resourceTypeChange, versionedChange, beforeDisc.BaseProperties, afterDisc.BaseProperties))
{
if (beforeProp is null && afterProp is {})
{
yield return $"""
* {GetTypeLink(resourceType, version, change.Name)}: Added property '{afterProp}'
""";
}
if (beforeProp is {} && afterProp is null)
{
yield return $"""
* {GetTypeLink(resourceType, version, change.Name)}: Removed property '{afterProp}'
""";
}
}
break;
case ({} beforeType, {} afterType):
yield return $"""
* {GetTypeLink(resourceType, version, change.Name)}: Changed type from {beforeType.GetType()} to {afterType.GetType()}
""";
break;
}
}
}