11using ModularityKit . Mutator . Abstractions . Context ;
22using ModularityKit . Mutator . Abstractions . Effects ;
33using ModularityKit . Mutator . Abstractions . Engine ;
4+ using System . Text . Json ;
5+ using WorkflowApprovals . Contracts ;
46using WorkflowApprovals . Mutations ;
57using WorkflowApprovals . State ;
68
@@ -12,6 +14,9 @@ internal static async Task Run(IMutationEngine engine)
1214 {
1315 Console . WriteLine ( "\n === Side Effects Scenario ===" ) ;
1416
17+ SideEffectDataContractRegistry . Register < WorkflowStartedSideEffectData > ( ) ;
18+ SideEffectDataContractRegistry . Register < WorkflowRejectedSideEffectData > ( ) ;
19+
1520 var state = new ApprovalWorkflowState ( ) ;
1621
1722 var startContext = MutationContext . System ( "Start side effect demo" , correlationId : "workflow-side-effects" ) ;
@@ -51,9 +56,25 @@ private static void PrintSideEffects(string operation, IReadOnlyList<SideEffect>
5156 $ " { effect . Type } | severity={ effect . Severity } | requiresAction={ effect . RequiresAction } ") ;
5257 Console . WriteLine ( $ " { effect . Description } ") ;
5358
54- if ( effect . Data is not null )
59+ var roundtrip = JsonSerializer . Deserialize < SideEffect > ( JsonSerializer . Serialize ( effect ) ) ;
60+
61+ if ( roundtrip ? . TryGetData < WorkflowStartedSideEffectData > ( out var started ) == true )
62+ {
63+ Console . WriteLine (
64+ $ " contract={ roundtrip . DataContractType } @v{ roundtrip . DataContractVersion } | initiator={ started ! . Initiator } | workflowId={ started . WorkflowId } ") ;
65+ continue ;
66+ }
67+
68+ if ( roundtrip ? . TryGetData < WorkflowRejectedSideEffectData > ( out var rejected ) == true )
69+ {
70+ Console . WriteLine (
71+ $ " contract={ roundtrip . DataContractType } @v{ roundtrip . DataContractVersion } | rejector={ rejected ! . Rejector } | state={ rejected . State } ") ;
72+ continue ;
73+ }
74+
75+ if ( roundtrip ? . Data is not null )
5576 {
56- Console . WriteLine ( $ " data={ effect . Data } ") ;
77+ Console . WriteLine ( $ " data={ roundtrip . Data } ") ;
5778 }
5879 }
5980 }
0 commit comments