using Version = SemanticVersioning.Version;
namespace SPTarkov.Server.Core.Models.Spt.Mod;
///
/// Represents a collection of metadata used to determine things such as author, version,
/// pre-defined load order and incompatibilities. This record is required to be overridden by all mods.
/// All properties must be overridden. For properties, that you don't need, just assign null.
///
public abstract record AbstractModMetadata
{
///
/// A Global Unique ID (GUID) to distinguish this mod from all others.
///
/// It is recommended (but not mandatory) to use
/// reverse domain name notation.
///
public abstract string ModGuid { get; init; }
///
/// Name of this mod
///
public abstract string Name { get; init; }
///
/// Your username
///
public abstract string Author { get; init; }
///
/// People who have contributed to this mod
///
public abstract List? Contributors { get; set; }
///
/// Semantic version of this mod, this uses the semver standard: https://semver.org/
///
/// Version = new Version("1.0.0"); is valid
///
/// Version = new Version("1.0.0.0"); is not
///
public abstract Version Version { get; }
///
/// SPT version this mod was built for, this uses the semver standard: https://semver.org/
///
/// Version = new Version("4.0.0"); is valid
///
/// Version = new Version("4.0.0.0"); is not
///
public abstract Version SptVersion { get; }
///
/// List of mods this mod should load before
///
public abstract List? LoadBefore { get; set; }
///
/// List of mods this mod should load after
///
public abstract List? LoadAfter { get; set; }
///
/// List of mods not compatible with this mod
///
public abstract List? Incompatibilities { get; set; }
///
/// Dictionary of mods this mod depends on.
///
/// Mod dependency is the key, version is the value
///
public abstract Dictionary? ModDependencies { get; set; }
///
/// Link to this mod's mod page, or GitHub page
///
public abstract string? Url { get; set; }
///
/// Does this mod load bundles
///
public abstract bool? IsBundleMod { get; set; }
///
/// Name of the license this mod uses
///
public abstract string License { get; init; }
}