private static FindWorkspacePolicyFragmentDto GetFindWorkspacePolicyFragmentDto()

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;
        }
    }