using System.Collections.Immutable; namespace StabilityMatrix.Core.Models.Api.Comfy; public readonly record struct ComfyScheduler(string Name) { public static ComfyScheduler Normal { get; } = new("normal"); public static ComfyScheduler Karras { get; } = new("karras"); public static ComfyScheduler Exponential { get; } = new("exponential"); private static Dictionary ConvertDict { get; } = new() { [Normal.Name] = "Normal", ["karras"] = "Karras", ["exponential"] = "Exponential", ["sgm_uniform"] = "SGM Uniform", ["simple"] = "Simple", ["ddim_uniform"] = "DDIM Uniform" }; public static IReadOnlyList Defaults { get; } = ConvertDict.Keys.Select(k => new ComfyScheduler(k)).ToImmutableArray(); public string DisplayName => ConvertDict.TryGetValue(Name, out var displayName) ? displayName : Name; private sealed class NameEqualityComparer : IEqualityComparer { public bool Equals(ComfyScheduler x, ComfyScheduler y) { return x.Name == y.Name; } public int GetHashCode(ComfyScheduler obj) { return obj.Name.GetHashCode(); } } public static IEqualityComparer Comparer { get; } = new NameEqualityComparer(); }