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}\"");
}
}