Allow capability implementation methods to be async

This commit is contained in:
Lasse Blaauwbroek
2023-04-19 18:25:01 +02:00
committed by Jacob Alexander
parent d32854eb00
commit c037342615
8 changed files with 95 additions and 56 deletions

View File

@@ -203,6 +203,27 @@ void PyAsyncIoStream::shutdownWrite() {
_asyncio_stream_shutdown_write(protocol->obj);
}
class TaskToPromiseAdapter {
public:
TaskToPromiseAdapter(kj::PromiseFulfiller<void>& fulfiller,
kj::Own<PyRefCounter> task, PyObject* callback)
: task(kj::mv(task)) {
promise_task_add_done_callback(this->task->obj, callback, fulfiller);
}
~TaskToPromiseAdapter() {
promise_task_cancel(this->task->obj);
}
private:
kj::Own<PyRefCounter> task;
};
kj::Promise<void> taskToPromise(kj::Own<PyRefCounter> task, PyObject* callback) {
return kj::newAdaptedPromise<void, TaskToPromiseAdapter>(kj::mv(task), callback);
}
void init_capnp_api() {
import_capnp__lib__capnp();
}