diff options
| author | levlam <levlam@telegram.org> | 2022-06-28 14:02:14 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2022-06-28 14:02:14 +0300 |
| commit | ebebe0300ce83b729e93d227c0d9906a04a73fd6 (patch) | |
| tree | 4ffc05ac8f61caf5edb60978843019398caecad5 /tdactor | |
| parent | 340fb779c350029cb680c3f21dad9dad167419e0 (diff) | |
Move promise_send_closure to PromiseFuture.h.
Diffstat (limited to 'tdactor')
| -rw-r--r-- | tdactor/td/actor/PromiseFuture.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/tdactor/td/actor/PromiseFuture.h b/tdactor/td/actor/PromiseFuture.h index 1a8940558..d2585afc2 100644 --- a/tdactor/td/actor/PromiseFuture.h +++ b/tdactor/td/actor/PromiseFuture.h @@ -51,6 +51,14 @@ class EventPromise final : public PromiseInterface<Unit> { } } }; + +class SendClosure { + public: + template <class... ArgsT> + void operator()(ArgsT &&...args) const { + send_closure(std::forward<ArgsT>(args)...); + } +}; } // namespace detail inline Promise<Unit> create_event_promise(EventFull &&ok) { @@ -287,6 +295,13 @@ FutureActor<T> send_promise(ActorId<ActorAT> actor_id, ResultT (ActorBT::*func)( return pf.move_future(); } +template <class... ArgsT> +auto promise_send_closure(ArgsT &&...args) { + return [t = std::make_tuple(std::forward<ArgsT>(args)...)](auto &&res) mutable { + call_tuple(detail::SendClosure(), std::tuple_cat(std::move(t), std::make_tuple(std::forward<decltype(res)>(res)))); + }; +} + template <class T> Promise<T> create_promise_from_promise_actor(PromiseActor<T> &&from) { return Promise<T>(td::make_unique<PromiseActor<T>>(std::move(from))); |
