-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathHelper.WriteGroupsAsOpenApiSpecToFiles.cs
40 lines (32 loc) · 1.72 KB
/
Helper.WriteGroupsAsOpenApiSpecToFiles.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using Microsoft.OpenApi.Models;
using Microsoft.OpenApi.Services;
using Microsoft.OpenApi.Writers;
partial class Helper
{
public static async Task<List<(string FilePath, string ApiName)>> WriteGroupsAsOpenApiSpecToFiles(Dictionary<string, List<string>> groupedOperationIds, string outputDirectory, OpenApiDocument openApiDocument)
{
var fileInfos = new List<(string FilePath, string FileName)>();
foreach (var group in groupedOperationIds)
{
Func<string, OperationType?, OpenApiOperation, bool> predicate = (operationId, operationType, operation) =>
{
return group.Value.Contains(operation.OperationId); //funny enough, operationId is not the same as operation.OperationId
};
var filteredDoc = OpenApiFilterService.CreateFilteredDocument(openApiDocument, predicate);
// Write the OpenApiDocument to a file
var apiName = group.Key.Replace('.', '-');
var fileName = $"{apiName}.json";
var outputDirectoryFile = Path.Combine(outputDirectory, fileName);
using var fileStream = new FileStream(outputDirectoryFile, FileMode.Create, FileAccess.Write);
using var streamWriter = new StreamWriter(fileStream);
var jsonWriter = new OpenApiJsonWriter(streamWriter);
filteredDoc.SerializeAsV3(jsonWriter);
await streamWriter.FlushAsync();
// Add the tuple of file path and file name to the list
fileInfos.Add((outputDirectoryFile, apiName));
Console.WriteLine($"Created API definition '{fileName}' to path '{outputDirectory}'.");
}
// Return the list of tuples
return fileInfos;
}
}