public record ApiVersionRequirement()

in src/TemplateRefGenerator/Config/RemarksLoader.cs [23:84]


    public record ApiVersionRequirement(
        string? Minimum,
        string? Maximum);

    public record ResourceRemark(
        ImmutableArray<string> ResourceTypes,
        ApiVersionRequirement? ApiVersion,
        string Description);

    public record PropertyRemark(
        string ResourceType,
        ApiVersionRequirement? ApiVersion,
        string ObjectName,
        string PropertyName,
        string Description);

    public record DeploymentRemark(
        string ResourceType,
        ApiVersionRequirement? ApiVersion,
        DeploymentType DeploymentType,
        string Description);

    public record CodeSample(
        string ResourceType,
        ApiVersionRequirement? ApiVersion,
        string Path,
        string Description);

    public record RemarksFile(
        ImmutableArray<ResourceRemark>? ResourceRemarks,
        ImmutableArray<PropertyRemark>? PropertyRemarks,
        ImmutableArray<DeploymentRemark>? DeploymentRemarks,
        ImmutableArray<CodeSample>? BicepSamples)
    {
        public static RemarksFile Empty
            => new(null, null, null, null);

        public IEnumerable<ResourceRemark> GetResourceRemarks(MarkdownGenerator.ResourceMetadata resource)
            => (ResourceRemarks ?? [])
                .Where(r => r.ResourceTypes.Contains(resource.ResourceType, StringComparer.OrdinalIgnoreCase))
                .Where(r => FilterApiVersions(resource, r.ApiVersion));

        public IEnumerable<PropertyRemark> GetPropertyRemarks(MarkdownGenerator.ResourceMetadata resource)
            => (PropertyRemarks ?? [])
                .Where(r => StringComparer.OrdinalIgnoreCase.Equals(resource.ResourceType, r.ResourceType))
                .Where(r => FilterApiVersions(resource, r.ApiVersion));

        public IEnumerable<DeploymentRemark> GetDeploymentRemarks(MarkdownGenerator.ResourceMetadata resource, DeploymentType type)
            => (DeploymentRemarks ?? [])
                .Where(r => StringComparer.OrdinalIgnoreCase.Equals(resource.ResourceType, r.ResourceType))
                .Where(r => r.DeploymentType == type)
                .Where(r => FilterApiVersions(resource, r.ApiVersion));

        public IEnumerable<CodeSample> GetBicepSamples(MarkdownGenerator.ResourceMetadata resource)
            => (BicepSamples ?? [])
                .Where(r => StringComparer.OrdinalIgnoreCase.Equals(resource.ResourceType, r.ResourceType))
                .Where(r => FilterApiVersions(resource, r.ApiVersion));

        private static bool FilterApiVersions(MarkdownGenerator.ResourceMetadata resource, ApiVersionRequirement? apiVersionRequirement)
            => (apiVersionRequirement?.Minimum is null || ApiVersionComparer.Instance.Compare(apiVersionRequirement.Minimum, resource.ApiVersion) >= 0) &&
            (apiVersionRequirement?.Maximum is null || ApiVersionComparer.Instance.Compare(apiVersionRequirement.Maximum, resource.ApiVersion) <= 0);
    }