// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Cqrs.Abstractions.Cqrs;
namespace GFramework.Cqrs.Tests.Cqrs;
///
/// 为 hidden implementation stream invoker 回归提供“可见请求 + 隐藏实现类型”的测试替身容器。
///
internal static class HiddenImplementationStreamInvokerContainer
{
///
/// 用于验证 generated stream invoker metadata 在隐藏实现类型场景下仍可被 dispatcher 消费的流式请求。
///
/// 用于构造 generated stream 输出的起始值。
internal sealed record VisibleStreamRequest(int Start) : IStreamRequest;
///
/// 供 registrar 通过可见 stream handler interface 注册、但自身保持隐藏的流式 handler 实现。
///
private sealed class HiddenHandler : IStreamRequestHandler
{
///
/// 返回 runtime 路径专用异步流,便于与 generated invoker 路径区分。
///
/// 当前测试流式请求。
/// 取消令牌。
/// runtime handler 生成的异步流结果。
public IAsyncEnumerable Handle(VisibleStreamRequest request, CancellationToken cancellationToken)
{
ArgumentNullException.ThrowIfNull(request);
return StreamResultsAsync(request.Start, cancellationToken);
}
///
/// 生成用于区分 runtime 路径的固定异步流结果。
///
private static async IAsyncEnumerable StreamResultsAsync(
int start,
[EnumeratorCancellation] CancellationToken cancellationToken)
{
yield return start;
await Task.Yield();
cancellationToken.ThrowIfCancellationRequested();
yield return start + 1;
}
}
///
/// 返回当前隐藏 stream handler 实现类型,供 generated registry 以反射注册语义模拟 hidden implementation 场景。
///
internal static Type HiddenHandlerType => typeof(HiddenHandler);
}