in tools/code/publisher/PolicyFragment.cs [151:202]
private static FindPolicyFragmentDto GetFindPolicyFragmentDto(IServiceProvider provider)
{
var serviceDirectory = provider.GetRequiredService<ManagementServiceDirectory>();
var tryGetFileContents = provider.GetRequiredService<TryGetFileContents>();
var overrideFactory = provider.GetRequiredService<OverrideDtoFactory>();
var overrideDto = overrideFactory.Create<PolicyFragmentName, PolicyFragmentDto>();
return async (name, cancellationToken) =>
{
var informationFileDtoOption = await tryGetInformationFileDto(name, cancellationToken);
var policyContentsOption = await tryGetPolicyContents(name, cancellationToken);
return tryGetDto(name, informationFileDtoOption, policyContentsOption);
};
async ValueTask<Option<PolicyFragmentDto>> tryGetInformationFileDto(PolicyFragmentName name, CancellationToken cancellationToken)
{
var informationFile = PolicyFragmentInformationFile.From(name, serviceDirectory);
var contentsOption = await tryGetFileContents(informationFile.ToFileInfo(), cancellationToken);
return from contents in contentsOption
select contents.ToObjectFromJson<PolicyFragmentDto>();
}
async ValueTask<Option<BinaryData>> tryGetPolicyContents(PolicyFragmentName name, CancellationToken cancellationToken)
{
var policyFile = PolicyFragmentPolicyFile.From(name, serviceDirectory);
return await tryGetFileContents(policyFile.ToFileInfo(), cancellationToken);
}
Option<PolicyFragmentDto> tryGetDto(PolicyFragmentName name, Option<PolicyFragmentDto> informationFileDtoOption, Option<BinaryData> policyContentsOption)
{
if (informationFileDtoOption.IsNone && policyContentsOption.IsNone)
{
return Option<PolicyFragmentDto>.None;
}
var dto = informationFileDtoOption.IfNone(() => new PolicyFragmentDto { Properties = new PolicyFragmentDto.PolicyFragmentContract() });
policyContentsOption.Iter(contents => dto = dto with
{
Properties = dto.Properties with
{
Format = "rawxml",
Value = contents.ToString()
}
});
return overrideDto(name, dto);
}
}