Source file faraday_lwt.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
open Lwt
let serialize t ~yield ~writev =
let shutdown () =
Faraday.close t;
ignore (Faraday.drain t);
in
let rec loop t =
match Faraday.operation t with
| `Writev iovecs ->
writev iovecs
>>= (function
| `Closed -> shutdown (); return ()
| `Ok n -> Faraday.shift t n; loop t)
| `Yield ->
yield t >>= fun () -> loop t
| `Close -> return ()
in
catch
(fun () -> loop t)
(fun exn ->
shutdown ();
fail exn)