// A spot for immutable helpers // TODO // TODO // TODO // x) Wrap metadata into its own struct // x) Make metadata a struct vs a class using imm; using System; using System.Runtime.CompilerServices; static public class iu { //This can handle both Timed and Recorded static public T Process( ref T obj, Func fn, string reason = "", [CallerMemberName] string dbgName = "", [CallerFilePath] string dbgPath = "", [CallerLineNumber] int dbgLine = 0, [CallerArgumentExpression("fn")] string dbgExpression = default ) where T : Recorded, Imm { obj = obj.Process( fn, reason, dbgName, dbgPath, dbgLine, dbgExpression ); return obj; } static public Timed Process( ref Timed obj, Func fn, string reason = "", [CallerMemberName] string dbgName = "", [CallerFilePath] string dbgPath = "", [CallerLineNumber] int dbgLine = 0, [CallerArgumentExpression("fn")] string dbgExpression = default ) where T : Timed, Imm { obj = obj.Process( fn, reason, dbgName, dbgPath, dbgLine, dbgExpression ); return obj; } static public T LightProcess( ref T obj, Func fn, string reason = "", [CallerMemberName] string dbgName = "", [CallerFilePath] string dbgPath = "", [CallerLineNumber] int dbgLine = 0, [CallerArgumentExpression("fn")] string dbgExpression = default ) where T : Versioned, Imm { obj = obj.Process( fn, reason ); return obj; } }