9namespace opcua::services::detail {
15template <
typename HookFunction,
typename CompletionToken>
17 HookToken(HookFunction&& hookFunction, CompletionToken&& completionToken)
18 : hook(std::move(hookFunction)),
19 token(std::move(completionToken)) {}
21 std::decay_t<HookFunction> hook;
22 std::decay_t<CompletionToken> token;
25template <
typename HookFunction,
typename CompletionToken>
26HookToken(HookFunction&&, CompletionToken&&) -> HookToken<HookFunction, CompletionToken>;
32template <
typename HookFunction,
typename CompletionToken,
typename T>
33struct AsyncResult<services::detail::HookToken<HookFunction, CompletionToken>, T> {
34 using Token = services::detail::HookToken<HookFunction, CompletionToken>;
36 template <
typename Initiation,
typename... Args>
38 Initiation&& initiation,
43 [innerInitiation = std::forward<Initiation>(initiation),
44 innerHook = std::forward<Token>(token).hook](
45 auto&& handler,
auto&&... innerArgs
49 [innerHook = std::move(innerHook),
50 innerHandler = std::forward<
decltype(handler)>(handler)](
auto&& result
52 std::invoke(innerHook, std::as_const(result));
53 std::invoke(innerHandler, result);
55 std::forward<decltype(innerArgs)>(innerArgs)...
58 std::forward<Token>(token).token,
59 std::forward<Args>(args)...
auto asyncInitiate(Initiation &&initiation, CompletionToken &&token, Args &&... args)
static void initiate(Initiation &&initiation, CompletionHandler &&handler, Args &&... args)