private void TryParseCapability()

in src/Readers/Vipr.Reader.OData.v4/Capabilities/CapabilityAnnotationParser.cs [39:84]


        private void TryParseCapability(OdcmObject odcmObject, IEdmExpression expression, string annotationTerm)
        {
            if (odcmObject is OdcmProperty prop && prop.ChildPropertyTypes.Any())
            {
                prop.ChildPropertyTypes.ForEach(x => TryParseCapability(x, expression, annotationTerm));
            }

            if (HasSpecializedParser(odcmObject, expression, annotationTerm))
            {
                // Do nothing
            }
            else if (expression is IEdmBooleanConstantExpression)
            {
                bool value = (expression as IEdmBooleanConstantExpression).Value;
                SetBooleanCapability(odcmObject, value, annotationTerm);
            }
            else if (expression is IEdmEnumMemberExpression)
            {
                var values = (expression as IEdmEnumMemberExpression).EnumMembers.Select(v => v.Name);
                SetEnumCapability(odcmObject, values, annotationTerm);
            }
            else if (expression is IEdmStringConstantExpression)
            {
                var value = (expression as IEdmStringConstantExpression).Value;
                SetStringCapability(odcmObject, value, annotationTerm);
            }
            else if (expression is IEdmPathExpression)
            {
                SetPathCapability(odcmObject, expression as IEdmPathExpression, annotationTerm);
            }
            else if (expression is IEdmRecordExpression)
            {
                foreach (var propertyConstructor in (expression as IEdmRecordExpression).Properties)
                {
                    TryParseCapability(odcmObject, propertyConstructor.Value, annotationTerm + "/" + propertyConstructor.Name);
                }
            }
            else if (expression is IEdmCollectionExpression)
            {
                ParseCollection(odcmObject, expression as IEdmCollectionExpression, annotationTerm);
            }
            else
            {
                Logger.Warn($"Unsupported annotation expression of kind {expression.ExpressionKind} for Term \"{annotationTerm}\"");
            }
        }