private static IEnumerable GetUpdates()

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;
            }
        }
    }