in tools/code/publisher/Api.cs [454:483]
private static GetApiDtosInPreviousCommit GetApiDtosInPreviousCommit(IServiceProvider provider)
{
var getArtifactsInPreviousCommit = provider.GetRequiredService<GetArtifactsInPreviousCommit>();
var serviceDirectory = provider.GetRequiredService<ManagementServiceDirectory>();
var cache = provider.GetRequiredService<IMemoryCache>();
var cacheKey = Guid.NewGuid().ToString();
return () =>
cache.GetOrCreate(cacheKey, _ => getDtos())!;
FrozenDictionary<ApiName, Func<CancellationToken, ValueTask<Option<ApiDto>>>> getDtos() =>
getArtifactsInPreviousCommit()
.Choose(kvp => from apiName in tryGetNameFromInformationFile(kvp.Key)
select (apiName, tryGetDto(kvp.Value)))
.ToFrozenDictionary();
Option<ApiName> tryGetNameFromInformationFile(FileInfo file) =>
from informationFile in ApiInformationFile.TryParse(file, serviceDirectory)
select informationFile.Parent.Name;
static Func<CancellationToken, ValueTask<Option<ApiDto>>> tryGetDto(Func<CancellationToken, ValueTask<Option<BinaryData>>> tryGetContents) =>
async cancellationToken =>
{
var contentsOption = await tryGetContents(cancellationToken);
return from contents in contentsOption
select contents.ToObjectFromJson<ApiDto>();
};
}