This commit is contained in:
Simon Cruanes 2025-05-02 10:30:58 -04:00
parent 46eeed460e
commit 213fed9f2d
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4
4 changed files with 45 additions and 0 deletions

View file

@ -37,6 +37,18 @@
(tags
(thread pool domain futures fork-join)))
(package
(name moonpool-eio)
(synopsis "Compatibility layer between moonpool and Eio")
(allow_empty) ; on < 5.0
(depends
(moonpool (= :version))
(ocaml (>= 5.0))
eio
(trace :with-test)
(trace-tef :with-test)
(odoc :with-doc)))
(package
(name moonpool-lwt)
(synopsis "Event loop for moonpool based on Lwt-engine (experimental)")

5
src/eio/dune Normal file
View file

@ -0,0 +1,5 @@
(library
(name moonpool_eio)
(public_name moonpool-eio)
(synopsis "compatibility layer between moonpool and eio")
(libraries moonpool eio))

24
src/eio/moonpool_eio.ml Normal file
View file

@ -0,0 +1,24 @@
let fut_of_moonpool (fut : 'a Moonpool.Fut.t) : 'a Eio.Promise.or_exn =
match Moonpool.Fut.peek fut with
| Some (Ok r) -> Eio.Promise.create_resolved @@ Ok r
| Some (Error (exn, _bt)) ->
let prom, resolver = Eio.Promise.create () in
Eio.Promise.resolve_error resolver exn;
prom
| None ->
let prom, resolver = Eio.Promise.create () in
Moonpool.Fut.on_result fut (function
| Ok r -> Eio.Promise.resolve_ok resolver r
| Error (exn, _) -> Eio.Promise.resolve_error resolver exn);
prom
let await_moonpool (fut : 'a Moonpool.Fut.t) : 'a =
match Moonpool.Fut.peek fut with
| Some (Ok r) -> r
| Some (Error (exn, bt)) -> Printexc.raise_with_backtrace exn bt
| None ->
let prom, resolver = Eio.Promise.create () in
Moonpool.Fut.on_result fut (function
| Ok r -> Eio.Promise.resolve_ok resolver r
| Error (exn, _) -> Eio.Promise.resolve_error resolver exn);
Eio.Promise.await_exn prom

4
src/eio/moonpool_eio.mli Normal file
View file

@ -0,0 +1,4 @@
val fut_of_moonpool : 'a Moonpool.Fut.t -> 'a Eio.Promise.or_exn
val await_moonpool : 'a Moonpool.Fut.t -> 'a
(** Await a moonpool future *)