using IPA.JsonConverters; using IPA.Utilities; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SemVer; using System; using System.Collections.Generic; using AlmostVersionConverter = IPA.JsonConverters.AlmostVersionConverter; using Version = SemVer.Version; #if NET3 using Net3_Proxy; using Array = Net3_Proxy.Array; #endif namespace IPA.Loader { internal class PluginManifest { [JsonProperty("name", Required = Required.Always)] public string Name; [JsonProperty("id", Required = Required.AllowNull)] public string Id; [JsonProperty("description", Required = Required.Always), JsonConverter(typeof(MultilineStringConverter))] public string Description; [JsonProperty("version", Required = Required.Always), JsonConverter(typeof(SemverVersionConverter))] public Version Version; [JsonProperty("gameVersion", Required = Required.Always), JsonConverter(typeof(AlmostVersionConverter))] public AlmostVersion GameVersion; [JsonProperty("author", Required = Required.Always)] public string Author; [JsonProperty("dependsOn", Required = Required.DisallowNull, ItemConverterType = typeof(SemverRangeConverter))] public Dictionary Dependencies = new Dictionary(); [JsonProperty("conflictsWith", Required = Required.DisallowNull, ItemConverterType = typeof(SemverRangeConverter))] public Dictionary Conflicts = new Dictionary(); [JsonProperty("features", Required = Required.DisallowNull)] public Dictionary Features = new Dictionary(); [JsonProperty("loadBefore", Required = Required.DisallowNull)] public string[] LoadBefore = Array.Empty(); [JsonProperty("loadAfter", Required = Required.DisallowNull)] public string[] LoadAfter = Array.Empty(); [JsonProperty("icon", Required = Required.DisallowNull)] public string IconPath = null; [JsonProperty("files", Required = Required.DisallowNull)] public string[] Files = Array.Empty(); [Serializable] public class LinksObject { [JsonProperty("project-home", Required = Required.DisallowNull)] public Uri ProjectHome = null; [JsonProperty("project-source", Required = Required.DisallowNull)] public Uri ProjectSource = null; [JsonProperty("donate", Required = Required.DisallowNull)] public Uri Donate = null; } [JsonProperty("links", Required = Required.DisallowNull)] public LinksObject Links = null; [Serializable] public class MiscObject { [JsonProperty("plugin-hint", Required = Required.DisallowNull)] public string PluginMainHint = null; } [JsonProperty("misc", Required = Required.DisallowNull)] public MiscObject Misc = null; } }