Allow capability implementation methods to be async
This commit is contained in:
committed by
Jacob Alexander
parent
d32854eb00
commit
c037342615
@@ -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();
|
||||
}
|
||||
|
||||
@@ -141,4 +141,10 @@ inline void rejectVoidDisconnected(kj::PromiseFulfiller<void>& fulfiller, kj::St
|
||||
fulfiller.reject(KJ_EXCEPTION(DISCONNECTED, message));
|
||||
}
|
||||
|
||||
inline kj::Exception makeException(kj::StringPtr message) {
|
||||
return KJ_EXCEPTION(FAILED, message);
|
||||
}
|
||||
|
||||
kj::Promise<void> taskToPromise(kj::Own<PyRefCounter> coroutine, PyObject* callback);
|
||||
|
||||
void init_capnp_api();
|
||||
|
||||
@@ -32,6 +32,7 @@ cdef extern from "capnp/helpers/capabilityHelper.h":
|
||||
PyPromise convert_to_pypromise(Own[VoidPromise])
|
||||
VoidPromise convert_to_voidpromise(Own[PyPromise])
|
||||
PyPromise wrapSizePromise(Promise[size_t])
|
||||
VoidPromise taskToPromise(Own[PyRefCounter] coroutine, PyObject* callback)
|
||||
void init_capnp_api()
|
||||
|
||||
cdef extern from "capnp/helpers/rpcHelper.h":
|
||||
|
||||
Reference in New Issue
Block a user