uvco 0.1
Loading...
Searching...
No Matches
run.h
Go to the documentation of this file.
1// uvco (c) 2025 Lewin Bormann. See LICENSE for specific terms.
2
3#pragma once
4
5#include "uvco/loop/loop.h"
7
8namespace uvco {
9
12
13class Loop;
14
15// Forward declaration only for friend declaration.
16template <typename F, typename R>
17concept MainFunction = std::is_invocable_r_v<Promise<R>, F, const Loop &>;
18
19template <typename R, MainFunction<R> F> R runMain(F main);
20
41template <typename R, MainFunction<R> F> R runMain(F main) {
42 Loop loop;
43 Promise<R> promise = main(loop);
44 runLoop(loop);
45 // Returns when libuv does not see any handles left, and neither
46 // are any promises ready.
47 return promise.unwrap();
48}
49
51
52} // namespace uvco
Definition loop.h:26
Definition promise.h:49
T unwrap()
Definition promise.h:96
Definition run.h:17
R runMain(F main)
Definition run.h:41
Definition async_work.cc:18
void runLoop(Loop &loop)
Definition run.cc:7