internal record K8sApiMetadata()

in src/Azure.Deployments.Extensibility.Extensions.Kubernetes/Api/ApiCatalog/K8sApiMetadata.cs [11:66]


    internal record K8sApiMetadata(
        string? Group,
        string Version,
        string Kind,
        string Plural,
        bool Namespaced,
        ImmutableArray<string> MajorMinorServerVersions) : IComparable<K8sApiMetadata>
    {
        public K8sApiMetadata(string? group, string version, string kind)
            : this(group, version, kind, "", default, default)
        {
        }

        public static K8sApiMetadata From(ResourceSpecification resourceSpecification)
        {
            ArgumentException.ThrowIfNullOrEmpty(resourceSpecification.ApiVersion);

            var typeMatch = RegexPatterns.ResourceType().Match(resourceSpecification.Type);
            var group = typeMatch.Groups["group"].Value;
            var kind = typeMatch.Groups["kind"].Value;
            var version = resourceSpecification.ApiVersion;

            return new(group, version, kind, "", default, default);
        }

        public int CompareTo(K8sApiMetadata? other)
        {
            if (other is null)
            {
                return 1;
            }

            int result = string.CompareOrdinal(this.Group ?? "", other.Group ?? "");

            if (result != 0)
            {
                return result;
            }

            result = string.CompareOrdinal(this.Version, other.Version);

            if (result != 0)
            {
                return result;
            }

            return string.CompareOrdinal(this.Kind, other.Kind);
        }

        public bool Matches(SemVersion serverVersion)
        {
            var majorMinorServerVersion = $"{serverVersion.Major}.{serverVersion.Minor}";

            return this.MajorMinorServerVersions.BinarySearch(majorMinorServerVersion) >= 0;
        }
    }