using System; using System.Collections.Generic; namespace ShrinkModFramework { [Serializable] public sealed class ShrinkModInfo { public string ModId { get; } public string DisplayName { get; } public string Version { get; } public int LoadOrder { get; } public Type EntryType { get; } public bool AutoApplyHarmonyPatches { get; } public IReadOnlyList Dependencies { get; } public ShrinkModInfo(string modId, string displayName, string version, int loadOrder, Type entryType, bool autoApplyHarmonyPatches, IReadOnlyList dependencies) { ModId = modId; DisplayName = displayName; Version = version; LoadOrder = loadOrder; EntryType = entryType; AutoApplyHarmonyPatches = autoApplyHarmonyPatches; Dependencies = dependencies == null ? Array.Empty() : new List(dependencies).AsReadOnly(); } public override string ToString() => $"{DisplayName} ({ModId}@{Version})"; } [Serializable] public sealed class ShrinkModDependency { public string ModId { get; } public string MinimumVersion { get; } public bool Optional { get; } public string VersionRange { get; } public ShrinkModDependencyOrdering Ordering { get; } public ShrinkModDependency(string modId, string minimumVersion, bool optional) : this(modId, minimumVersion, optional, ShrinkModDependencyOrdering.After, null) { } public ShrinkModDependency(string modId, string minimumVersion, bool optional, ShrinkModDependencyOrdering ordering = ShrinkModDependencyOrdering.After, string versionRange = null) { if (string.IsNullOrWhiteSpace(modId)) throw new ArgumentException("ModId must not be empty.", nameof(modId)); if (!Enum.IsDefined(typeof(ShrinkModDependencyOrdering), ordering)) throw new ArgumentOutOfRangeException(nameof(ordering)); ModId = modId.Trim(); MinimumVersion = minimumVersion; Optional = optional; VersionRange = versionRange ?? minimumVersion; Ordering = ordering; ShrinkModVersionRange.Parse(VersionRange); } public override string ToString() => $"{ModId} {VersionRange ?? "*"} ({Ordering}{(Optional ? ", optional" : "")})"; } }