// A spot for immutable helpers // TODO // TODO // TODO // x) Wrap metadata into its own struct // x) Make metadata a struct vs a class 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 : imm.Recorded, imm.Imm { obj = obj.Process( fn, reason, dbgName, dbgPath, dbgLine, dbgExpression ); return obj; } static public imm.Timed Process( ref imm.Timed obj, Func fn, string reason = "", [CallerMemberName] string dbgName = "", [CallerFilePath] string dbgPath = "", [CallerLineNumber] int dbgLine = 0, [CallerArgumentExpression("fn")] string dbgExpression = default ) where T : imm.Timed, imm.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 : imm.Versioned, imm.Imm { obj = obj.Process( fn, reason ); return obj; } }