50 lines
1.1 KiB
C#
50 lines
1.1 KiB
C#
using System;
|
|
|
|
namespace NitroxModel.DataStructures;
|
|
|
|
/// <summary>
|
|
/// Serializable version of <see cref="Version" /> with only major and minor properties.
|
|
/// </summary>
|
|
[Serializable]
|
|
public readonly struct NitroxVersion : IComparable<NitroxVersion>
|
|
{
|
|
public ushort Major { get; init; }
|
|
|
|
public ushort Minor { get; init; }
|
|
|
|
|
|
public NitroxVersion(ushort major, ushort minor)
|
|
{
|
|
Major = major;
|
|
Minor = minor;
|
|
}
|
|
|
|
public NitroxVersion(int major, int minor) : this((ushort)major, (ushort)minor)
|
|
{
|
|
if (major is < 0 or > ushort.MaxValue)
|
|
{
|
|
throw new ArgumentOutOfRangeException(nameof(major));
|
|
}
|
|
if (minor is < 0 or > ushort.MaxValue)
|
|
{
|
|
throw new ArgumentOutOfRangeException(nameof(minor));
|
|
}
|
|
}
|
|
|
|
public int CompareTo(NitroxVersion other)
|
|
{
|
|
if (Major != other.Major)
|
|
{
|
|
return Major > other.Major ? 1 : -1;
|
|
}
|
|
if (Minor != other.Minor)
|
|
{
|
|
return Minor > other.Minor ? 1 : -1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public override string ToString() => $"{Major}.{Minor}";
|
|
}
|