mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2026-01-28 20:04:51 -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} *)
|
(** {2 Conversions} *)
|
||||||
|
|
||||||
|
type 'a lwt_klist = [ `Nil | `Cons of 'a * 'a lwt_klist ] Lwt.t
|
||||||
|
|
||||||
let of_list l : _ Reader.t =
|
let of_list l : _ Reader.t =
|
||||||
let p = create ~max_size:0 () in
|
let p = create ~max_size:0 () in
|
||||||
keep p (Lwt_list.iter_s (write p) l >>= fun () -> close p);
|
keep p (Lwt_list.iter_s (write p) l >>= fun () -> close p);
|
||||||
|
|
@ -332,6 +334,17 @@ let of_string a =
|
||||||
keep p (send 0);
|
keep p (send 0);
|
||||||
p
|
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 =
|
let to_list_rev r =
|
||||||
Reader.fold ~f:(fun acc x -> x :: acc) ~x:[] 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
|
let buf = Buffer.create 128 in
|
||||||
to_buffer_str ?sep buf r >>>= fun () -> LwtErr.return (Buffer.contents buf)
|
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} *)
|
(** {2 Basic IO wrappers} *)
|
||||||
|
|
||||||
module IO = struct
|
module IO = struct
|
||||||
|
|
|
||||||
|
|
@ -164,12 +164,16 @@ end
|
||||||
|
|
||||||
(** {2 Conversions} *)
|
(** {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_list : 'a list -> 'a Reader.t
|
||||||
|
|
||||||
val of_array : 'a array -> 'a Reader.t
|
val of_array : 'a array -> 'a Reader.t
|
||||||
|
|
||||||
val of_string : string -> char 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_rev : ('a,[>`r]) t -> 'a list LwtErr.t
|
||||||
|
|
||||||
val to_list : ('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 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} *)
|
(** {2 Basic IO wrappers} *)
|
||||||
|
|
||||||
module IO : sig
|
module IO : sig
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue