in src/Microsoft.OpenApi.CSharpAnnotations.DocumentGeneration/Extensions/XElementExtensions.cs [390:482]
private static OpenApiExample ToOpenApiExample(
this XElement element,
Dictionary<string, FieldValueInfo> crefFieldValueMap,
List<GenerationError> generationErrors)
{
var exampleChildElements = element.Elements();
if (!exampleChildElements.Any())
{
return null;
}
var summaryElement = exampleChildElements.FirstOrDefault(p => p.Name == KnownXmlStrings.Summary);
var openApiExample = new OpenApiExample();
if (summaryElement != null)
{
openApiExample.Summary = summaryElement.Value;
}
var valueElement = exampleChildElements.FirstOrDefault(p => p.Name == KnownXmlStrings.Value);
var urlElement = exampleChildElements.FirstOrDefault(p => p.Name == KnownXmlStrings.Url);
if (valueElement != null && urlElement != null)
{
generationErrors.Add(
new GenerationError
{
ExceptionType = nameof(InvalidExampleException),
Message = SpecificationGenerationMessages.ProvideEitherValueOrUrlTag
});
return null;
}
IOpenApiAny exampleValue = null;
if (valueElement != null)
{
var seeNodes = element.Descendants(KnownXmlStrings.See);
var crefValue = seeNodes
.Select(node => node.Attribute(KnownXmlStrings.Cref)?.Value)
.FirstOrDefault(crefVal => crefVal != null);
if (string.IsNullOrWhiteSpace(valueElement.Value) && string.IsNullOrWhiteSpace(crefValue))
{
generationErrors.Add(
new GenerationError
{
ExceptionType = nameof(InvalidExampleException),
Message = SpecificationGenerationMessages.ProvideValueForExample
});
return null;
}
if (!string.IsNullOrWhiteSpace(valueElement.Value))
{
exampleValue = new OpenApiStringReader()
.ReadFragment<IOpenApiAny>(
valueElement.Value,
OpenApiSpecVersion.OpenApi3_0,
out OpenApiDiagnostic _);
}
if (!string.IsNullOrWhiteSpace(crefValue) && crefFieldValueMap.ContainsKey(crefValue))
{
var fieldValueInfo = crefFieldValueMap[crefValue];
if (fieldValueInfo.Error != null)
{
generationErrors.Add(fieldValueInfo.Error);
return null;
}
exampleValue = new OpenApiStringReader().ReadFragment<IOpenApiAny>(
fieldValueInfo.Value,
OpenApiSpecVersion.OpenApi3_0,
out OpenApiDiagnostic _);
}
openApiExample.Value = exampleValue;
}
if (urlElement != null)
{
openApiExample.ExternalValue = urlElement.Value;
}
return openApiExample;
}