in tools/code/publisher/WorkspacePolicyFragment.cs [151:199]
private static FindWorkspacePolicyFragmentDto GetFindWorkspacePolicyFragmentDto(IServiceProvider provider)
{
var serviceDirectory = provider.GetRequiredService<ManagementServiceDirectory>();
var tryGetFileContents = provider.GetRequiredService<TryGetFileContents>();
return async (name, workspaceName, cancellationToken) =>
{
var informationFileDtoOption = await tryGetInformationFileDto(name, workspaceName, cancellationToken);
var policyContentsOption = await tryGetPolicyContents(name, workspaceName, cancellationToken);
return tryGetDto(informationFileDtoOption, policyContentsOption);
};
async ValueTask<Option<WorkspacePolicyFragmentDto>> tryGetInformationFileDto(PolicyFragmentName name, WorkspaceName workspaceName, CancellationToken cancellationToken)
{
var informationFile = WorkspacePolicyFragmentInformationFile.From(name, workspaceName, serviceDirectory);
var contentsOption = await tryGetFileContents(informationFile.ToFileInfo(), cancellationToken);
return from contents in contentsOption
select contents.ToObjectFromJson<WorkspacePolicyFragmentDto>();
}
async ValueTask<Option<BinaryData>> tryGetPolicyContents(PolicyFragmentName name, WorkspaceName workspaceName, CancellationToken cancellationToken)
{
var policyFile = WorkspacePolicyFragmentPolicyFile.From(name, workspaceName, serviceDirectory);
return await tryGetFileContents(policyFile.ToFileInfo(), cancellationToken);
}
Option<WorkspacePolicyFragmentDto> tryGetDto(Option<WorkspacePolicyFragmentDto> informationFileDtoOption, Option<BinaryData> policyContentsOption)
{
if (informationFileDtoOption.IsNone && policyContentsOption.IsNone)
{
return Option<WorkspacePolicyFragmentDto>.None;
}
var dto = informationFileDtoOption.IfNone(() => new WorkspacePolicyFragmentDto { Properties = new WorkspacePolicyFragmentDto.PolicyFragmentContract() });
policyContentsOption.Iter(contents => dto = dto with
{
Properties = dto.Properties with
{
Format = "rawxml",
Value = contents.ToString()
}
});
return dto;
}
}