mirror of
https://github.com/c-cube/moonpool.git
synced 2026-01-29 04:34:50 -05:00
wip: eio
This commit is contained in:
parent
46eeed460e
commit
213fed9f2d
4 changed files with 45 additions and 0 deletions
12
dune-project
12
dune-project
|
|
@ -37,6 +37,18 @@
|
||||||
(tags
|
(tags
|
||||||
(thread pool domain futures fork-join)))
|
(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
|
(package
|
||||||
(name moonpool-lwt)
|
(name moonpool-lwt)
|
||||||
(synopsis "Event loop for moonpool based on Lwt-engine (experimental)")
|
(synopsis "Event loop for moonpool based on Lwt-engine (experimental)")
|
||||||
|
|
|
||||||
5
src/eio/dune
Normal file
5
src/eio/dune
Normal 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
24
src/eio/moonpool_eio.ml
Normal 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
4
src/eio/moonpool_eio.mli
Normal 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 *)
|
||||||
Loading…
Add table
Reference in a new issue