in src/Microsoft.OpenApi.Readers/ParseNodes/PropertyNode.cs [28:87]
public void ParseField<T>(
T parentInstance,
IDictionary<string, Action<T, ParseNode>> fixedFields,
IDictionary<Func<string, bool>, Action<T, string, ParseNode>> patternFields)
{
Action<T, ParseNode> fixedFieldMap;
var found = fixedFields.TryGetValue(Name, out fixedFieldMap);
if (fixedFieldMap != null)
{
try
{
Context.StartObject(Name);
fixedFieldMap(parentInstance, Value);
}
catch (OpenApiReaderException ex)
{
Context.Diagnostic.Errors.Add(new OpenApiError(ex));
}
catch (OpenApiException ex)
{
ex.Pointer = Context.GetLocation();
Context.Diagnostic.Errors.Add(new OpenApiError(ex));
}
finally
{
Context.EndObject();
}
}
else
{
var map = patternFields.Where(p => p.Key(Name)).Select(p => p.Value).FirstOrDefault();
if (map != null)
{
try
{
Context.StartObject(Name);
map(parentInstance, Name, Value);
}
catch (OpenApiReaderException ex)
{
Context.Diagnostic.Errors.Add(new OpenApiError(ex));
}
catch (OpenApiException ex)
{
ex.Pointer = Context.GetLocation();
Context.Diagnostic.Errors.Add(new OpenApiError(ex));
}
finally
{
Context.EndObject();
}
}
else
{
Context.Diagnostic.Errors.Add(
new OpenApiError("", $"{Name} is not a valid property at {Context.GetLocation()}"));
}
}
}