private static FindPolicyFragmentDto GetFindPolicyFragmentDto()

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