mirror of
https://github.com/c-cube/moonpool.git
synced 2026-01-28 12:14:51 -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
|
||||
(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
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