From 17ff2d2c938e36512bc8f48708aaff63cf85c2a9 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Fri, 9 Dec 2022 12:26:07 +0100 Subject: [PATCH] Apply [JsonConstructor] to fix deserialization --- .../Elsa.Telnyx/Activities/AnswerCall.cs | 2 + .../Elsa.Telnyx/Activities/BridgeCalls.cs | 3 ++ src/modules/Elsa.Telnyx/Activities/Dial.cs | 3 ++ .../Activities/GatherUsingAudio.cs | 2 + .../Activities/GatherUsingSpeak.cs | 2 + .../Elsa.Telnyx/Activities/HangupCall.cs | 3 ++ .../Elsa.Telnyx/Activities/IncomingCall.cs | 2 + .../Elsa.Telnyx/Activities/LookupNumber.cs | 2 + .../Elsa.Telnyx/Activities/PlayAudio.cs | 3 ++ .../Elsa.Telnyx/Activities/SpeakText.cs | 3 ++ .../Elsa.Telnyx/Activities/StartRecording.cs | 3 ++ .../Activities/StopAudioPlayback.cs | 3 ++ .../Elsa.Telnyx/Activities/StopRecording.cs | 2 + .../Elsa.Telnyx/Activities/TransferCall.cs | 2 + .../Elsa.Workflows.Core/Activities/Break.cs | 7 ++++ .../Elsa.Workflows.Core/Activities/Finish.cs | 19 +++++---- .../Elsa.Workflows.Core/Activities/For.cs | 3 ++ .../Elsa.Workflows.Core/Activities/ForEach.cs | 1 + .../Elsa.Workflows.Core/Activities/Fork.cs | 10 ++++- .../Elsa.Workflows.Core/Activities/If.cs | 5 ++- .../Elsa.Workflows.Core/Activities/Inline.cs | 42 ++++++++++++++++++- .../Activities/NotFoundActivity.cs | 5 +++ .../Activities/ParallelForEach.cs | 2 + .../Activities/ReadLine.cs | 2 + .../Activities/Sequence.cs | 2 + .../Activities/SetVariable.cs | 2 + .../Elsa.Workflows.Core/Activities/While.cs | 11 ++++- .../Activities/WriteLine.cs | 9 +++- 28 files changed, 143 insertions(+), 12 deletions(-) diff --git a/src/modules/Elsa.Telnyx/Activities/AnswerCall.cs b/src/modules/Elsa.Telnyx/Activities/AnswerCall.cs index 5f542455c..0399a1209 100644 --- a/src/modules/Elsa.Telnyx/Activities/AnswerCall.cs +++ b/src/modules/Elsa.Telnyx/Activities/AnswerCall.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Attributes; using Elsa.Telnyx.Bookmarks; using Elsa.Telnyx.Client.Models; @@ -21,6 +22,7 @@ namespace Elsa.Telnyx.Activities; public class FlowAnswerCall : AnswerCallBase { /// + [JsonConstructor] public FlowAnswerCall([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/BridgeCalls.cs b/src/modules/Elsa.Telnyx/Activities/BridgeCalls.cs index 519a71e5b..903fa4cf4 100644 --- a/src/modules/Elsa.Telnyx/Activities/BridgeCalls.cs +++ b/src/modules/Elsa.Telnyx/Activities/BridgeCalls.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Attributes; using Elsa.Telnyx.Bookmarks; using Elsa.Telnyx.Client.Models; @@ -20,6 +21,7 @@ namespace Elsa.Telnyx.Activities; public class FlowBridgeCalls : BridgeCallsBase { /// + [JsonConstructor] public FlowBridgeCalls([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } @@ -32,6 +34,7 @@ public class FlowBridgeCalls : BridgeCallsBase public class BridgeCalls : BridgeCallsBase { /// + [JsonConstructor] public BridgeCalls([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/Dial.cs b/src/modules/Elsa.Telnyx/Activities/Dial.cs index 2860648e2..1d8a9f628 100644 --- a/src/modules/Elsa.Telnyx/Activities/Dial.cs +++ b/src/modules/Elsa.Telnyx/Activities/Dial.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Attributes; using Elsa.Telnyx.Bookmarks; using Elsa.Telnyx.Client.Models; @@ -127,6 +128,7 @@ public abstract class DialBase : ActivityBase [FlowNode("Answered", "Hangup", "Voicemail")] public class FlowDial : DialBase { + [JsonConstructor] private FlowDial([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } @@ -147,6 +149,7 @@ public class FlowDial : DialBase public class Dial : DialBase { /// + [JsonConstructor] public Dial([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/GatherUsingAudio.cs b/src/modules/Elsa.Telnyx/Activities/GatherUsingAudio.cs index a691873a3..8ad9c4b50 100644 --- a/src/modules/Elsa.Telnyx/Activities/GatherUsingAudio.cs +++ b/src/modules/Elsa.Telnyx/Activities/GatherUsingAudio.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Attributes; using Elsa.Telnyx.Bookmarks; using Elsa.Telnyx.Client.Models; @@ -23,6 +24,7 @@ namespace Elsa.Telnyx.Activities; public class GatherUsingAudio : ActivityBase, IBookmarksPersistedHandler { /// + [JsonConstructor] public GatherUsingAudio([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/GatherUsingSpeak.cs b/src/modules/Elsa.Telnyx/Activities/GatherUsingSpeak.cs index c839a5996..e4a3799b5 100644 --- a/src/modules/Elsa.Telnyx/Activities/GatherUsingSpeak.cs +++ b/src/modules/Elsa.Telnyx/Activities/GatherUsingSpeak.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Attributes; using Elsa.Telnyx.Bookmarks; using Elsa.Telnyx.Client.Models; @@ -24,6 +25,7 @@ namespace Elsa.Telnyx.Activities; public class GatherUsingSpeak : ActivityBase, IBookmarksPersistedHandler { /// + [JsonConstructor] public GatherUsingSpeak([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/HangupCall.cs b/src/modules/Elsa.Telnyx/Activities/HangupCall.cs index 335a2dc4f..c63750edf 100644 --- a/src/modules/Elsa.Telnyx/Activities/HangupCall.cs +++ b/src/modules/Elsa.Telnyx/Activities/HangupCall.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Client.Models; using Elsa.Telnyx.Client.Services; using Elsa.Telnyx.Extensions; @@ -16,6 +17,7 @@ namespace Elsa.Telnyx.Activities; public class FlowHangupCall : HangupCallBase { /// + [JsonConstructor] public FlowHangupCall([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } @@ -31,6 +33,7 @@ public class FlowHangupCall : HangupCallBase public class HangupCall : HangupCallBase { /// + [JsonConstructor] public HangupCall([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/IncomingCall.cs b/src/modules/Elsa.Telnyx/Activities/IncomingCall.cs index 66ace6af3..63bb6ea79 100644 --- a/src/modules/Elsa.Telnyx/Activities/IncomingCall.cs +++ b/src/modules/Elsa.Telnyx/Activities/IncomingCall.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Expressions.Models; using Elsa.Telnyx.Bookmarks; using Elsa.Telnyx.Extensions; @@ -23,6 +24,7 @@ namespace Elsa.Telnyx.Activities; public class IncomingCall : Trigger { /// + [JsonConstructor] public IncomingCall([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/LookupNumber.cs b/src/modules/Elsa.Telnyx/Activities/LookupNumber.cs index 0220d5d5f..be93cd3c1 100644 --- a/src/modules/Elsa.Telnyx/Activities/LookupNumber.cs +++ b/src/modules/Elsa.Telnyx/Activities/LookupNumber.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Client.Models; using Elsa.Telnyx.Client.Services; using Elsa.Workflows.Core; @@ -15,6 +16,7 @@ namespace Elsa.Telnyx.Activities; public class LookupNumber : Activity { /// + [JsonConstructor] public LookupNumber([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/PlayAudio.cs b/src/modules/Elsa.Telnyx/Activities/PlayAudio.cs index d2a6886ce..36ad8a939 100644 --- a/src/modules/Elsa.Telnyx/Activities/PlayAudio.cs +++ b/src/modules/Elsa.Telnyx/Activities/PlayAudio.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Attributes; using Elsa.Telnyx.Bookmarks; using Elsa.Telnyx.Client.Models; @@ -20,6 +21,7 @@ namespace Elsa.Telnyx.Activities; public class FlowPlayAudio : PlayAudioBase { /// + [JsonConstructor] public FlowPlayAudio([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } @@ -35,6 +37,7 @@ public class FlowPlayAudio : PlayAudioBase public class PlayAudio : PlayAudioBase { /// + [JsonConstructor] public PlayAudio([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/SpeakText.cs b/src/modules/Elsa.Telnyx/Activities/SpeakText.cs index 41504653d..31c251e9d 100644 --- a/src/modules/Elsa.Telnyx/Activities/SpeakText.cs +++ b/src/modules/Elsa.Telnyx/Activities/SpeakText.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Attributes; using Elsa.Telnyx.Bookmarks; using Elsa.Telnyx.Client.Models; @@ -132,6 +133,7 @@ public abstract class SpeakTextBase : ActivityBase public class FlowSpeakText : SpeakTextBase { /// + [JsonConstructor] public FlowSpeakText([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } @@ -147,6 +149,7 @@ public class FlowSpeakText : SpeakTextBase public class SpeakText : SpeakTextBase { /// + [JsonConstructor] public SpeakText([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/StartRecording.cs b/src/modules/Elsa.Telnyx/Activities/StartRecording.cs index 95ee46c98..a0af96681 100644 --- a/src/modules/Elsa.Telnyx/Activities/StartRecording.cs +++ b/src/modules/Elsa.Telnyx/Activities/StartRecording.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Attributes; using Elsa.Telnyx.Bookmarks; using Elsa.Telnyx.Client.Models; @@ -20,6 +21,7 @@ namespace Elsa.Telnyx.Activities; public class FlowStartRecording : StartRecordingBase { /// + [JsonConstructor] public FlowStartRecording([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } @@ -35,6 +37,7 @@ public class FlowStartRecording : StartRecordingBase public class StartRecording : StartRecordingBase { /// + [JsonConstructor] public StartRecording([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/StopAudioPlayback.cs b/src/modules/Elsa.Telnyx/Activities/StopAudioPlayback.cs index dece1896a..91ea43ee7 100644 --- a/src/modules/Elsa.Telnyx/Activities/StopAudioPlayback.cs +++ b/src/modules/Elsa.Telnyx/Activities/StopAudioPlayback.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Client.Models; using Elsa.Telnyx.Client.Services; using Elsa.Telnyx.Extensions; @@ -16,6 +17,7 @@ namespace Elsa.Telnyx.Activities; public class FlowStopAudioPlayback : StopAudioPlaybackBase { /// + [JsonConstructor] public FlowStopAudioPlayback([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } @@ -31,6 +33,7 @@ public class FlowStopAudioPlayback : StopAudioPlaybackBase public class StopAudioPlayback : StopAudioPlaybackBase { /// + [JsonConstructor] public StopAudioPlayback([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/StopRecording.cs b/src/modules/Elsa.Telnyx/Activities/StopRecording.cs index 92aad50a3..6dc189894 100644 --- a/src/modules/Elsa.Telnyx/Activities/StopRecording.cs +++ b/src/modules/Elsa.Telnyx/Activities/StopRecording.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Client.Models; using Elsa.Telnyx.Client.Services; using Elsa.Telnyx.Extensions; @@ -18,6 +19,7 @@ namespace Elsa.Telnyx.Activities; public class StopRecording : ActivityBase { /// + [JsonConstructor] public StopRecording([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Telnyx/Activities/TransferCall.cs b/src/modules/Elsa.Telnyx/Activities/TransferCall.cs index c97f49159..bed51c310 100644 --- a/src/modules/Elsa.Telnyx/Activities/TransferCall.cs +++ b/src/modules/Elsa.Telnyx/Activities/TransferCall.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Telnyx.Client.Models; using Elsa.Telnyx.Client.Services; using Elsa.Telnyx.Extensions; @@ -20,6 +21,7 @@ namespace Elsa.Telnyx.Activities; public class TransferCall : Activity { /// + [JsonConstructor] public TransferCall([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Workflows.Core/Activities/Break.cs b/src/modules/Elsa.Workflows.Core/Activities/Break.cs index d636eaec8..cdadf13ba 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/Break.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/Break.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Workflows.Core.Attributes; using Elsa.Workflows.Core.Models; using Elsa.Workflows.Core.Signals; @@ -11,6 +12,12 @@ namespace Elsa.Workflows.Core.Activities; [Activity("Elsa", "Control Flow", "Break out of a loop.")] public class Break : Activity { + /// + [JsonConstructor] + public Break() + { + } + /// public Break([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { diff --git a/src/modules/Elsa.Workflows.Core/Activities/Finish.cs b/src/modules/Elsa.Workflows.Core/Activities/Finish.cs index c21b6278d..f65c0a83a 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/Finish.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/Finish.cs @@ -1,18 +1,23 @@ +using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Workflows.Core.Attributes; -using Elsa.Workflows.Core.Behaviors; using Elsa.Workflows.Core.Models; namespace Elsa.Workflows.Core.Activities; -[Activity("Elsa", "Control Flow", "Mark the workflow as Finished")] -public class Finish : Activity +/// +/// Mark the workflow as finished. +/// +[Activity("Elsa", "Control Flow", "Mark the workflow as finished.")] +public class Finish : ActivityBase { - public Finish() + /// + [JsonConstructor] + public Finish([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { - // Don't let ancestor activities schedule additional work. - Behaviors.Remove(); } - + + /// protected override void Execute(ActivityExecutionContext context) { context.ClearCompletionCallbacks(); diff --git a/src/modules/Elsa.Workflows.Core/Activities/For.cs b/src/modules/Elsa.Workflows.Core/Activities/For.cs index b99e9cf7e..64c0650fb 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/For.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/For.cs @@ -8,6 +8,9 @@ using Elsa.Workflows.Core.Services; namespace Elsa.Workflows.Core.Activities; +/// +/// Iterate over a sequence of steps between a start and an end number. +/// [Activity("Elsa", "Control Flow", "Iterate over a sequence of steps between a start and an end number.")] public class For : ActivityBase { diff --git a/src/modules/Elsa.Workflows.Core/Activities/ForEach.cs b/src/modules/Elsa.Workflows.Core/Activities/ForEach.cs index 234628904..9994fbe81 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/ForEach.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/ForEach.cs @@ -17,6 +17,7 @@ public class ForEach : ActivityBase private const string CurrentIndexProperty = "CurrentIndex"; /// + [JsonConstructor] public ForEach([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) { Behaviors.Add(this); diff --git a/src/modules/Elsa.Workflows.Core/Activities/Fork.cs b/src/modules/Elsa.Workflows.Core/Activities/Fork.cs index 3d5c17f35..17fa6934e 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/Fork.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/Fork.cs @@ -7,6 +7,7 @@ using Elsa.Workflows.Core.Attributes; using Elsa.Workflows.Core.Behaviors; using Elsa.Workflows.Core.Models; using Elsa.Workflows.Core.Services; +using Elsa.Workflows.Core.Signals; namespace Elsa.Workflows.Core.Activities; @@ -20,6 +21,7 @@ public class Fork : ActivityBase [JsonConstructor] public Fork([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { + OnSignalReceived(OnBreakAsync); } /// @@ -75,7 +77,6 @@ public class Fork : ActivityBase } } - private void RemoveBookmarks(ActivityExecutionContext context) { // Find all descendants for each branch and remove them as well as any associated bookmarks. @@ -86,4 +87,11 @@ public class Fork : ActivityBase workflowExecutionContext.Bookmarks.RemoveWhere(x => branchDescendantActivityIds.Contains(x.ActivityId)); } + + private async ValueTask OnBreakAsync(BreakSignal signal, SignalContext context) + { + RemoveBookmarks(context.ReceiverActivityExecutionContext); + await CompleteAsync(context.ReceiverActivityExecutionContext); + context.StopPropagation(); + } } \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Core/Activities/If.cs b/src/modules/Elsa.Workflows.Core/Activities/If.cs index 014795e3d..3edeaf516 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/If.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/If.cs @@ -7,7 +7,10 @@ using Elsa.Workflows.Core.Services; namespace Elsa.Workflows.Core.Activities; -[Activity("Elsa", "Control Flow", "Evaluate a Boolean condition to determine which path to execute next.")] +/// +/// Evaluate a Boolean condition to determine which activity to execute next. +/// +[Activity("Elsa", "Control Flow", "Evaluate a Boolean condition to determine which activity to execute next.")] public class If : ActivityBase { /// diff --git a/src/modules/Elsa.Workflows.Core/Activities/Inline.cs b/src/modules/Elsa.Workflows.Core/Activities/Inline.cs index 3ed65a5f4..6a19ebd6b 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/Inline.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/Inline.cs @@ -13,15 +13,18 @@ public class Inline : Activity { private readonly Func _activity; + /// public Inline(Func activity, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { _activity = activity; } + /// public Inline(Func activity, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(_ => activity(), source, line) { } + /// public Inline(Action activity, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(c => { activity(c); @@ -30,6 +33,7 @@ public class Inline : Activity { } + /// public Inline(Action activity, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(c => { activity(); @@ -38,16 +42,47 @@ public class Inline : Activity { } + /// protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) => await _activity(context); + /// + /// Creates a new activity from the specified delegate. + /// public static Inline From(Func activity) => new(activity); + + /// + /// Creates a new activity from the specified delegate. + /// public static Inline From(Func activity) => new(activity); + + /// + /// Creates a new activity from the specified delegate. + /// public static Inline From(Action activity) => new(activity); + + /// + /// Creates a new activity from the specified delegate. + /// public static Inline From(Action activity) => new(activity); + /// + /// Creates a new activity from the specified delegate. + /// public static Inline From(Func> activity) => new(activity); + + /// + /// Creates a new activity from the specified delegate. + /// public static Inline From(Func> activity) => new(activity); + + /// + /// Creates a new activity from the specified delegate. + /// public static Inline From(Func activity) => new(activity); + + /// + /// Creates a new activity from the specified delegate. + /// public static Inline From(Func activity) => new(activity); } @@ -58,17 +93,20 @@ public class Inline : Activity { private readonly Func> _activity; + /// public Inline(Func> activity, MemoryBlockReference? output = default, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(output, source, line) { _activity = activity; } + /// public Inline(Func> activity, MemoryBlockReference? output = default, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(_ => activity(), output, source, line) { } + /// public Inline(Func activity, MemoryBlockReference? output = default, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(c => { @@ -78,6 +116,7 @@ public class Inline : Activity { } + /// public Inline(Func activity, MemoryBlockReference? output = default, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(c => { @@ -86,7 +125,8 @@ public class Inline : Activity }, output, source, line) { } - + + /// protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) { var result = await _activity(context); diff --git a/src/modules/Elsa.Workflows.Core/Activities/NotFoundActivity.cs b/src/modules/Elsa.Workflows.Core/Activities/NotFoundActivity.cs index d5f6a87f9..21c381043 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/NotFoundActivity.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/NotFoundActivity.cs @@ -3,13 +3,18 @@ using Elsa.Workflows.Core.Models; namespace Elsa.Workflows.Core.Activities; +/// +/// This activity is instantiated in case a workflow references an activity type that could not be found. +/// [Browsable(false)] public class NotFoundActivity : Activity { + /// public NotFoundActivity() { } + /// public NotFoundActivity(string missingTypeName) { MissingTypeName = missingTypeName; diff --git a/src/modules/Elsa.Workflows.Core/Activities/ParallelForEach.cs b/src/modules/Elsa.Workflows.Core/Activities/ParallelForEach.cs index c342c6553..4820667a1 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/ParallelForEach.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/ParallelForEach.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Expressions.Models; using Elsa.Workflows.Core.Attributes; using Elsa.Workflows.Core.Models; @@ -16,6 +17,7 @@ public class ParallelForEach : Activity private const string CollectedCountProperty = nameof(CollectedCountProperty); /// + [JsonConstructor] public ParallelForEach([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Workflows.Core/Activities/ReadLine.cs b/src/modules/Elsa.Workflows.Core/Activities/ReadLine.cs index a0afc37ea..f3f585e97 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/ReadLine.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/ReadLine.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Expressions.Models; using Elsa.Workflows.Core.Attributes; using Elsa.Workflows.Core.Implementations; @@ -14,6 +15,7 @@ namespace Elsa.Workflows.Core.Activities; public class ReadLine : Activity { /// + [JsonConstructor] public ReadLine([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Workflows.Core/Activities/Sequence.cs b/src/modules/Elsa.Workflows.Core/Activities/Sequence.cs index 2b8c8ba18..00d5c5c5f 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/Sequence.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/Sequence.cs @@ -1,5 +1,6 @@ using System.ComponentModel; using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Workflows.Core.Attributes; using Elsa.Workflows.Core.Models; using Elsa.Workflows.Core.Services; @@ -17,6 +18,7 @@ public class Sequence : Container private const string CurrentIndexProperty = "CurrentIndex"; /// + [JsonConstructor] public Sequence([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { OnSignalReceived(OnBreak); diff --git a/src/modules/Elsa.Workflows.Core/Activities/SetVariable.cs b/src/modules/Elsa.Workflows.Core/Activities/SetVariable.cs index 0271adec0..36495770a 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/SetVariable.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/SetVariable.cs @@ -1,5 +1,6 @@ using System.ComponentModel; using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Expressions.Models; using Elsa.Workflows.Core.Attributes; using Elsa.Workflows.Core.Models; @@ -14,6 +15,7 @@ namespace Elsa.Workflows.Core.Activities; public class SetVariable : Activity { /// + [JsonConstructor] public SetVariable([CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { } diff --git a/src/modules/Elsa.Workflows.Core/Activities/While.cs b/src/modules/Elsa.Workflows.Core/Activities/While.cs index 0c9956aa8..1b7cfd2b0 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/While.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/While.cs @@ -11,11 +11,15 @@ namespace Elsa.Workflows.Core.Activities; [Activity("Elsa", "Primitives", "Execute an activity while a given condition evaluates to true.")] public class While : Activity { + /// + /// Creates a activity that loops forever. + /// public static While True(IActivity body) => new(body) { Condition = new Input(true) }; - + + /// [JsonConstructor] public While(IActivity? body = default, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : base(source, line) { @@ -24,26 +28,31 @@ public class While : Activity Behaviors.Remove(); } + /// public While(Input condition, IActivity? body = default, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(body, source, line) { Condition = condition; } + /// public While(Func> condition, IActivity? body = default, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(new Input(condition), body, source, line) { } + /// public While(Func condition, IActivity? body = default, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(new Input(condition), body, source, line) { } + /// public While(Func> condition, IActivity? body = default, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(new Input(condition), body, source, line) { } + /// public While(Func condition, IActivity? body = default, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(new Input(condition), body, source, line) { diff --git a/src/modules/Elsa.Workflows.Core/Activities/WriteLine.cs b/src/modules/Elsa.Workflows.Core/Activities/WriteLine.cs index 3291c7fec..37d18ee83 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/WriteLine.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/WriteLine.cs @@ -1,5 +1,6 @@ using System.ComponentModel; using System.Runtime.CompilerServices; +using System.Text.Json.Serialization; using Elsa.Expressions.Models; using Elsa.Workflows.Core.Attributes; using Elsa.Workflows.Core.Implementations; @@ -20,7 +21,13 @@ public class WriteLine : Activity } /// - public WriteLine(string text = default!, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(new Literal(text), source, line) + [JsonConstructor] + public WriteLine() + { + } + + /// + public WriteLine(string text, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(new Literal(text), source, line) { }