private void CompareEnums()

in openapi-diff/src/modeler/AutoRest.Swagger/Model/SwaggerObject.cs [183:219]


        private void CompareEnums(ComparisonContext<ServiceDefinition> context, T prior)
        {
            if (prior.Enum == null && this.Enum == null) return;

            CompareXmsEnum(context,prior);
            bool relaxes = (prior.Enum != null && this.Enum == null);
            bool constrains = (prior.Enum == null && this.Enum != null);
            if (!relaxes && !constrains)
            {
                // It was enum and it is still enum i.e check for addition/removal

                // 1. Look for removed elements (constraining).
                constrains = prior.Enum.Any(str => !this.Enum.Contains(str));

                // 2. Look for added elements (relaxing).
                relaxes = this.Enum.Any(str => !prior.Enum.Contains(str));


                if (constrains)
                {
                    IEnumerable<string> removedEnums = prior.Enum.Except(this.Enum);
                    if (removedEnums.Any())
                    {
                        context.LogBreakingChange(ComparisonMessages.RemovedEnumValue, String.Join(", ", removedEnums.ToList()));
                    }
                }

                if (relaxes)
                {
                    IEnumerable<string> addedEnums = this.Enum.Except(prior.Enum);
                    if (addedEnums.Any())
                    {
                        context.LogBreakingChange(ComparisonMessages.AddedEnumValue, String.Join(", ", addedEnums.ToList()));
                    }
                }
            }
        }