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;
}
}