aboutsummaryrefslogtreecommitdiffhomepage
path: root/tdactor
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2022-06-28 14:02:14 +0300
committerlevlam <levlam@telegram.org>2022-06-28 14:02:14 +0300
commitebebe0300ce83b729e93d227c0d9906a04a73fd6 (patch)
tree4ffc05ac8f61caf5edb60978843019398caecad5 /tdactor
parent340fb779c350029cb680c3f21dad9dad167419e0 (diff)
Move promise_send_closure to PromiseFuture.h.
Diffstat (limited to 'tdactor')
-rw-r--r--tdactor/td/actor/PromiseFuture.h15
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)));