using MessageFlow; namespace MessageFlow.Samples; /// /// The smallest possible chain: two inline predicates plus a fallback. /// public static class QuickStartSample { /// /// Builds a chain that classifies an integer. /// /// The composed chain. public static IChain BuildChain() => Chain.Create() .UseWhen(request => request < 0, (request, _) => new ValueTask($"negative:{request}")) .UseWhen(request => request == 0, (_, _) => new ValueTask("zero")) .WithFallback((request, _) => new ValueTask($"positive:{request}")) .Build(); /// /// Runs the sample, writing every classification to . /// /// The writer receiving the sample output. /// A token used to cancel the operation. /// The classifications, in request order. public static async Task> RunAsync( TextWriter output, CancellationToken cancellationToken = default) { ArgumentNullException.ThrowIfNull(output); var chain = BuildChain(); var results = new List(); foreach (var request in new[] { -7, 0, 42 }) { var response = await chain.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); results.Add(response); await output.WriteLineAsync($"{request} => {response}").ConfigureAwait(false); } return results; } }