mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-09 12:45:34 -05:00
Lwt_pipe: conversion to/from lwt_klist
This commit is contained in:
parent
0c49d30d85
commit
d338ce279c
2 changed files with 29 additions and 0 deletions
|
|
@ -303,6 +303,8 @@ end
|
|||
|
||||
(** {2 Conversions} *)
|
||||
|
||||
type 'a lwt_klist = [ `Nil | `Cons of 'a * 'a lwt_klist ] Lwt.t
|
||||
|
||||
let of_list l : _ Reader.t =
|
||||
let p = create ~max_size:0 () in
|
||||
keep p (Lwt_list.iter_s (write p) l >>= fun () -> close p);
|
||||
|
|
@ -332,6 +334,17 @@ let of_string a =
|
|||
keep p (send 0);
|
||||
p
|
||||
|
||||
let of_lwt_klist l =
|
||||
let p = create ~max_size:0 () in
|
||||
let rec next l =
|
||||
l >>= function
|
||||
| `Nil -> close p
|
||||
| `Cons (x, tl) ->
|
||||
write p x >>= fun () -> next tl
|
||||
in
|
||||
keep p (next l);
|
||||
p
|
||||
|
||||
let to_list_rev r =
|
||||
Reader.fold ~f:(fun acc x -> x :: acc) ~x:[] r
|
||||
|
||||
|
|
@ -361,6 +374,15 @@ let join_strings ?sep r =
|
|||
let buf = Buffer.create 128 in
|
||||
to_buffer_str ?sep buf r >>>= fun () -> LwtErr.return (Buffer.contents buf)
|
||||
|
||||
let to_lwt_klist r =
|
||||
let rec next () =
|
||||
read r >>= function
|
||||
| `End -> Lwt.return `Nil
|
||||
| `Error _ -> Lwt.return `Nil
|
||||
| `Ok x -> Lwt.return (`Cons (x, next ()))
|
||||
in
|
||||
next ()
|
||||
|
||||
(** {2 Basic IO wrappers} *)
|
||||
|
||||
module IO = struct
|
||||
|
|
|
|||
|
|
@ -164,12 +164,16 @@ end
|
|||
|
||||
(** {2 Conversions} *)
|
||||
|
||||
type 'a lwt_klist = [ `Nil | `Cons of 'a * 'a lwt_klist ] Lwt.t
|
||||
|
||||
val of_list : 'a list -> 'a Reader.t
|
||||
|
||||
val of_array : 'a array -> 'a Reader.t
|
||||
|
||||
val of_string : string -> char Reader.t
|
||||
|
||||
val of_lwt_klist : 'a lwt_klist -> 'a Reader.t
|
||||
|
||||
val to_list_rev : ('a,[>`r]) t -> 'a list LwtErr.t
|
||||
|
||||
val to_list : ('a,[>`r]) t -> 'a list LwtErr.t
|
||||
|
|
@ -186,6 +190,9 @@ val to_string : (char, [>`r]) t -> string LwtErr.t
|
|||
|
||||
val join_strings : ?sep:string -> (string, [>`r]) t -> string LwtErr.t
|
||||
|
||||
val to_lwt_klist : 'a Reader.t -> 'a lwt_klist
|
||||
(** Iterates on the reader. Errors are ignored (but stop the list). *)
|
||||
|
||||
(** {2 Basic IO wrappers} *)
|
||||
|
||||
module IO : sig
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue