using System.Diagnostics.CodeAnalysis; using JetBrains.Annotations; using YamlDotNet.Serialization; namespace Recyclarr.TrashLib.Config.Parsing; public record QualityScoreConfigYaml { public string? Name { get; [UsedImplicitly] init; } public int? Score { get; [UsedImplicitly] init; } } public record CustomFormatConfigYaml { public IReadOnlyCollection? TrashIds { get; [UsedImplicitly] init; } public IReadOnlyCollection? QualityProfiles { get; [UsedImplicitly] init; } } public record QualitySizeConfigYaml { public string? Type { get; [UsedImplicitly] init; } public decimal? PreferredRatio { get; [UsedImplicitly] init; } } public record QualityProfileConfigYaml { public string? Name { get; [UsedImplicitly] init; } public bool ResetUnmatchedScores { get; [UsedImplicitly] init; } } public record ServiceConfigYaml { public string? ApiKey { get; [UsedImplicitly] init; } [SuppressMessage("Design", "CA1056:URI-like properties should not be strings")] public string? BaseUrl { get; [UsedImplicitly] init; } public bool DeleteOldCustomFormats { get; [UsedImplicitly] init; } public bool ReplaceExistingCustomFormats { get; [UsedImplicitly] init; } public IReadOnlyCollection? CustomFormats { get; [UsedImplicitly] init; } public QualitySizeConfigYaml? QualityDefinition { get; [UsedImplicitly] init; } public IReadOnlyCollection? QualityProfiles { get; [UsedImplicitly] init; } } public record ReleaseProfileFilterConfigYaml { public IReadOnlyCollection? Include { get; [UsedImplicitly] init; } public IReadOnlyCollection? Exclude { get; [UsedImplicitly] init; } } public record ReleaseProfileConfigYaml { public IReadOnlyCollection? TrashIds { get; [UsedImplicitly] init; } public bool StrictNegativeScores { get; [UsedImplicitly] init; } public IReadOnlyCollection? Tags { get; [UsedImplicitly] init; } public ReleaseProfileFilterConfigYaml? Filter { get; [UsedImplicitly] init; } } // This is usually empty (or the same as ServiceConfigYaml) on purpose. // If empty, it is kept around to make it clear that this one is dedicated to Radarr. public record RadarrConfigYaml : ServiceConfigYaml; public record SonarrConfigYaml : ServiceConfigYaml { public IReadOnlyCollection? ReleaseProfiles { get; [UsedImplicitly] init; } } public record RootConfigYaml { public IReadOnlyDictionary? Radarr { get; [UsedImplicitly] init; } public IReadOnlyDictionary? Sonarr { get; [UsedImplicitly] init; } // This exists for validation purposes only. [YamlIgnore] public IEnumerable RadarrValues => Radarr?.Select(x => x.Value) ?? Array.Empty(); // This exists for validation purposes only. [YamlIgnore] public IEnumerable SonarrValues => Sonarr?.Select(x => x.Value) ?? Array.Empty(); }