mirror of
https://github.com/AssetRipper/AssetRipper.git
synced 2025-12-11 20:15:29 +01:00
AssetRipper.SmartEnums
User code:
[SmartEnum]
public readonly partial record struct MyEnum
{
private enum __Internal : uint
{
Value0,
Value1
}
public void CustomMethod() {}
}
Generated code:
readonly partial record struct MyEnum :
global::System.IParsable<MyEnum>,
global::System.Numerics.IBitwiseOperators<MyEnum, MyEnum, MyEnum>,
global::System.Numerics.IComparisonOperators<MyEnum, MyEnum, bool>,
global::System.Numerics.IEqualityOperators<MyEnum, MyEnum, bool>,
global::System.Numerics.IShiftOperators<MyEnum, int, MyEnum>
{
private readonly uint __value;
public MyEnum(uint value) => __value = value;
/// <inheritdoc cref="__Internal.Value0"/>
public const uint Value0 = (uint)__Internal.Value0;
/// <inheritdoc cref="__Internal.Value1"/>
public const uint Value1 = (uint)__Internal.Value1;
public static implicit operator uint(MyEnum value) => value.__value;
public static implicit operator MyEnum(uint value) => new(value);
public static MyEnum operator &(MyEnum left, MyEnum right) => new(left.__value & right.__value);
public static MyEnum operator |(MyEnum left, MyEnum right) => new(left.__value | right.__value);
public static MyEnum operator ^(MyEnum left, MyEnum right) => new(left.__value ^ right.__value);
public static MyEnum operator ~(MyEnum value) => new(~value.__value);
public static bool operator <(MyEnum left, MyEnum right) => left.__value < right.__value;
public static bool operator >(MyEnum left, MyEnum right) => left.__value > right.__value;
public static bool operator <=(MyEnum left, MyEnum right) => left.__value <= right.__value;
public static bool operator >=(MyEnum left, MyEnum right) => left.__value >= right.__value;
public static MyEnum operator <<(MyEnum value, int count) => new(value.__value << count);
public static MyEnum operator >>(MyEnum value, int count) => new(value.__value >> count);
public static MyEnum operator >>>(MyEnum value, int count) => new(value.__value >>> count);
public override string ToString() => __value switch
{
Value0 => nameof(Value0),
Value1 => nameof(Value1),
_ => __value.ToString(),
};
public static MyEnum Parse(string s) => Parse(s, null);
public static MyEnum Parse(string s, IFormatProvider? provider) => s switch
{
nameof(MyEnum.Value0) => MyEnum.Value0,
nameof(MyEnum.Value1) => MyEnum.Value1,
_ => uint.Parse(s, provider),
};
public static bool TryParse(string? s, out MyEnum result) => TryParse(s, null, out result);
public static bool TryParse(string? s, IFormatProvider? provider, out MyEnum result)
{
switch (s)
{
case nameof(MyEnum.Value0):
result = MyEnum.Value0;
return true;
case nameof(MyEnum.Value1):
result = MyEnum.Value1;
return true;
default:
if (uint.TryParse(s, provider, out uint value))
{
result = new(value);
return true;
}
result = default;
return false;
}
}
public static global::System.ReadOnlySpan<MyEnum> GetValues() => __ValueCache.Values;
public static global::System.ReadOnlySpan<uint> GetUnderlyingValues() =>
[
Value0,
Value1,
];
public uint GetUnderlyingValue() => __value;
}
file static class __ValueCache
{
public static MyEnum[] Values = new MyEnum[]
{
MyEnum.Value0,
MyEnum.Value1,
};
}