in src/Microsoft.OpenApi/Services/OpenApiFilterService.cs [121:177]
public static OpenApiDocument CreateFilteredDocument(OpenApiDocument source, Func<string, OperationType?, OpenApiOperation, bool> predicate)
{
// Fetch and copy title, graphVersion and server info from OpenApiDoc
var subset = new OpenApiDocument
{
Info = new OpenApiInfo
{
Title = source.Info.Title + " - Subset",
Description = source.Info.Description,
TermsOfService = source.Info.TermsOfService,
Contact = source.Info.Contact,
License = source.Info.License,
Version = source.Info.Version,
Extensions = source.Info.Extensions
},
Components = new OpenApiComponents {SecuritySchemes = source.Components.SecuritySchemes},
SecurityRequirements = source.SecurityRequirements,
Servers = source.Servers
};
var results = FindOperations(source, predicate);
foreach (var result in results)
{
OpenApiPathItem pathItem;
var pathKey = result.CurrentKeys.Path;
if (subset.Paths == null)
{
subset.Paths = new OpenApiPaths();
pathItem = new OpenApiPathItem();
subset.Paths.Add(pathKey, pathItem);
}
else
{
if (!subset.Paths.TryGetValue(pathKey, out pathItem))
{
pathItem = new OpenApiPathItem();
subset.Paths.Add(pathKey, pathItem);
}
}
if (result.CurrentKeys.Operation != null)
{
pathItem.Operations.Add((OperationType)result.CurrentKeys.Operation, result.Operation);
}
}
if (subset.Paths == null)
{
throw new ArgumentException("No paths found for the supplied parameters.");
}
CopyReferences(subset);
return subset;
}