Attributes/AbstractOrderedAttribute.cs

using System;
using System.Reflection;
 
namespace Ominous.Attributes;
 
public abstract class AbstractOrderedAttribute : Attribute, IComparable<AbstractOrderedAttribute>
{
    public int CompareTo(AbstractOrderedAttribute other)
    {
        var precendence = GetType().GetCustomAttribute<OrderPrecedenceAttribute>()?.Order ?? OrderPrecedenceAttribute.PROCESS_LAST;
        var oprecendence = other?.GetType().GetCustomAttribute<OrderPrecedenceAttribute>()?.Order ?? OrderPrecedenceAttribute.PROCESS_LAST;
        return precendence.CompareTo(oprecendence);
    }
}