You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

86 lines
3.2 KiB

#nullable enable
using Hive.Versioning;
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 = Hive.Versioning.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 = null!;
[JsonProperty("id", Required = Required.AllowNull)] // TODO: on major version bump, make this always
public string? Id;
[JsonProperty("description", Required = Required.Always), JsonConverter(typeof(MultilineStringConverter))]
public string Description = null!;
[JsonProperty("version", Required = Required.Always), JsonConverter(typeof(SemverVersionConverter))]
public Version Version = null!;
[JsonProperty("gameVersion", Required = Required.DisallowNull), JsonConverter(typeof(AlmostVersionConverter))]
public AlmostVersion? GameVersion;
[JsonProperty("author", Required = Required.Always)]
public string Author = null!;
[JsonProperty("dependsOn", Required = Required.DisallowNull, ItemConverterType = typeof(SemverRangeConverter))]
public Dictionary<string, VersionRange> Dependencies = new();
[JsonProperty("conflictsWith", Required = Required.DisallowNull, ItemConverterType = typeof(SemverRangeConverter))]
public Dictionary<string, VersionRange> Conflicts = new();
[JsonProperty("features", Required = Required.DisallowNull), JsonConverter(typeof(FeaturesFieldConverter))]
public Dictionary<string, List<JObject>> Features = new();
[JsonProperty("loadBefore", Required = Required.DisallowNull)]
public string[] LoadBefore = Array.Empty<string>();
[JsonProperty("loadAfter", Required = Required.DisallowNull)]
public string[] LoadAfter = Array.Empty<string>();
[JsonProperty("icon", Required = Required.DisallowNull)]
public string? IconPath = null;
[JsonProperty("files", Required = Required.DisallowNull)]
public string[] Files = Array.Empty<string>();
[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;
}
}