From ad4bcf31a95bc651af18c488a2c1bfc9bbf1fe24 Mon Sep 17 00:00:00 2001 From: Marc Hernandez Date: Tue, 30 Apr 2024 20:39:21 -0700 Subject: [PATCH] Cleaner Imm --- imm/Imm.cs | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/imm/Imm.cs b/imm/Imm.cs index 6978349..fb0138d 100644 --- a/imm/Imm.cs +++ b/imm/Imm.cs @@ -189,7 +189,7 @@ public record class Recorded : Versioned MetaStorage = Meta with { Version = orig.Meta.Version + 1, - Reason = reason, + Reason = !string.IsNullOrWhiteSpace( reason ) ? reason : next.Meta.Reason, ZZOld = orig, MemberName = dbgName, @@ -227,6 +227,10 @@ public record class Timed : Recorded public TimeSpan Since => Meta.TouchedAt - Meta.Old?.Meta.TouchedAt ?? TimeSpan.MaxValue; + public void CallOnChange() + { + OnChange( Meta.Old, (T)this ); + } override public T Record( string reason = "", @@ -250,6 +254,18 @@ public record class Timed : Recorded return Process( ( old ) => next, reason, dbgName, dbgPath, lineNumber, dbgExp ); } + public U ProcessFn( Func fn, + string reason = "", + [CallerMemberName] string dbgName = "", + [CallerFilePath] string dbgPath = "", + [CallerLineNumber] int lineNumber = 0, + [CallerArgumentExpression("next")] + string dbgExp = default + ) + where U : T + { + return (U)ProcessFn( fn, reason, dbgName, dbgPath, lineNumber, dbgExp ); + } override public T Process( Func fn, string reason = "", @@ -259,6 +275,16 @@ public record class Timed : Recorded [CallerArgumentExpression("fn")] string dbgExp = default ) + => ProcessFn( fn, reason, dbgName, dbgPath, dbgLine, dbgExp ); + + public T ProcessFn( Func fn, + string reason = "", + [CallerMemberName] string dbgName = "", + [CallerFilePath] string dbgPath = "", + [CallerLineNumber] int dbgLine = 0, + [CallerArgumentExpression("fn")] + string dbgExp = default + ) { var orig = ( T )this; @@ -270,7 +296,7 @@ public record class Timed : Recorded { //Versioned Version = orig.Meta.Version + 1, - Reason = reason, + Reason = !string.IsNullOrWhiteSpace( reason ) ? reason : next.Meta.Reason, //Recorded MemberName = dbgName,