module Reader: Readermodule Read_result:sig..end
module Id:Core.Std.Unique_id
type t
val sexp_of_t : t -> Sexplib.Sexp.tval io_stats : Io_stats.tio_stats Overall IO statistics for all readersval last_read_time : t -> Core.Std.Time.tlast_read_time t returns time of the most recent read system call that
returned data.val stdin : t Lazy.tstdin is a reader for file descriptor 0. It is lazy because we don't want
to create it in all programs that happen to link with async.val open_file : ?buf_len:int -> string -> t Import.Deferred.topen_file file opens file for reading and returns a reader reading from
it.val transfer : t -> string Import.Pipe.Writer.t -> unit Import.Deferred.ttransfer t pipe_w transfers data from t into pipe_w one chunk at a time
(whatever is read from the underlying file descriptor without post-processing). The
result becomes determined after reaching EOF on t and the final bytes have been
transferred.
This function will normally not be needed (see pipe).
val pipe : t -> string Import.Pipe.Reader.tpipe t returns the reader end of a pipe that will continually be filled with chunks
of data from the underlying Reader.t. The pipe will be closed when the reader
reaches EOF.val create : ?buf_len:int -> Fd.t -> tcreate ~buf_len fd creates a new reader that is reading from fd.val of_in_channel : Pervasives.in_channel -> Fd.Kind.t -> tval with_file : ?buf_len:int ->
?exclusive:bool ->
string -> f:(t -> 'a Import.Deferred.t) -> 'a Import.Deferred.twith_file file f opens files, creates a reader with it, and passes the reader to
f. It closes the reader when the result of f becomes determined, and returns
f's result.
NOTE, you need to be careful that all your IO is done when the deferred you return
becomes determined. If for example, you use with_file, and call lines, make sure
you return a deferred that becomes determined when the EOF is reached on the pipe,
not when you get the pipe (because you get it straight away).
val close : t -> unit Import.Deferred.tclose t closes the underlying file descriptor of the reader.val closed : t -> unit Import.Deferred.tclosed t returns a deferred that is filled in when the reader is
closed by a call to close. The deferred becomes determined after the
underlying close() system call completes.val close_was_started : t -> boolclose_was_started t returns true if the closing process for the Reader has
been started (it may not yet be closed, however).val id : t -> Id.tid tval fd : t -> Fd.tfd tval read : t ->
?pos:int -> ?len:int -> string -> int Read_result.t Import.Deferred.tread t ?pos ?len buf reads up to len bytes into buf, blocking
until some data is available or end-of-input is reached. The resulting
i satisfies 0 < i <= len.val read_one_chunk_at_a_time_until_eof : t ->
handle_chunk:(Core.Std.Bigstring.t ->
pos:int ->
len:int -> [ `Continue | `Stop of 'a ] Import.Deferred.t) ->
[ `Eof | `Stopped of 'a ] Import.Deferred.tread_one_chunk_at_a_time_until_eof t ~handle_chunk reads into t's internal
buffer, and whenever bytes are available, applies handle_chunk to them. It waits to
read again until the deferred returned by handle_chunk becomes determined.val read_substring : t ->
Core.Std.Substring.t -> int Read_result.t Import.Deferred.tread_substring t ss reads up to Substring.length ss bytes into ss,
blocking until some data is available or Eof is reched. The resulting i
satisfies 0 < i <= Substring.length ss.val read_bigsubstring : t ->
Core.Std.Bigsubstring.t -> int Read_result.t Import.Deferred.tval read_char : t -> char Read_result.t Import.Deferred.tval really_read : t ->
?pos:int -> ?len:int -> string -> [ `Eof of int | `Ok ] Import.Deferred.treally_read t buf ?pos ?len reads until it fills len bytes of buf
starting at pos or runs out of input. In the former case it returns `Ok.
In the latter, it returns `Eof n where n is the number of bytes that
were read before end of input, and 0 <= n < String.length ss.val really_read_substring : t -> Core.Std.Substring.t -> [ `Eof of int | `Ok ] Import.Deferred.tval really_read_bigsubstring : t ->
Core.Std.Bigsubstring.t -> [ `Eof of int | `Ok ] Import.Deferred.tval read_until : t ->
[ `Char of char | `Pred of char -> bool ] ->
keep_delim:bool ->
[ `Eof | `Eof_without_delim of string | `Ok of string ] Import.Deferred.tread_until t pred ~keep_delim reads until it hits a delimiter c such that:pred = `Char c', c = c'pred = `Pred p, p c = true
`Char c' is equivalent to `Pred (fun c -> c = c') but the underlying
implementation is more efficient, in particular it will not call a function on every
input character.
read_until returns a freshly-allocated string consisting of all
the characters read and optionally including the delimiter as per
keep_delim.val read_until_max : t ->
[ `Char of char | `Pred of char -> bool ] ->
keep_delim:bool ->
max:int ->
[ `Eof
| `Eof_without_delim of string
| `Max_exceeded of string
| `Ok of string ] Import.Deferred.tval read_line : t -> string Read_result.t Import.Deferred.tread_line t reads up to, and including the next newline (\n)
character and returns a freshly-allocated string containing
everything up to but not including the newline character. If
read_line encounters EOF before the newline char then everything
read up to but not including EOF will be returned as a line.val really_read_line : wait_time:Core.Std.Time.Span.t -> t -> string option Import.Deferred.treally_read_line ~wait_time t reads up to, and including the next
newline (\n) character and returns an optional, freshly-allocated string
containing everything up to but not including the newline character.
If read_line encounters EOF before the newline char, then a time span of
wait_time will be used before the input operation is retried. If the
descriptor is closed, None will be returned.type'aread =?parse_pos:Core.Std.Sexp.Parse_pos.t -> 'a
val read_sexp : (t -> Core.Std.Sexp.t Read_result.t Import.Deferred.t)
readread_sexp t reads the next sexp.val read_sexps : (t -> Core.Std.Sexp.t Import.Pipe.Reader.t) readread_sexps t reads all the sexps and returns them as a pipe.val read_bin_prot : ?max_len:int ->
t ->
'a Bin_prot.Type_class.reader ->
'a Read_result.t Import.Deferred.tread_bin_prot ?max_len t bp_reader reads the next binary protocol
message using binary protocol reader bp_reader. The format is the
"size-prefixed binary protocol", in which the length of the data is
prefixed as a 64-bit integer to the data. This is the format that
Writer.write_bin_prot writes.val read_marshal_raw : t -> string Read_result.t Import.Deferred.tval read_marshal : t -> 'a Read_result.t Import.Deferred.tval recv : t -> string Read_result.t Import.Deferred.trecv t returns a string that was written with Writer.sendval read_all : t ->
(t -> 'a Read_result.t Import.Deferred.t) ->
'a Import.Pipe.Reader.tread_all t read_one returns a pipe that receives all values read from t by
repeatedly using read_one t. When read_all reaches EOF, it closes the resulting
pipe, but not t.val lines : t -> string Import.Pipe.Reader.tlines t reads all the lines from t and puts them in the pipe, one line per
pipe element.val contents : t -> string Import.Deferred.tcontents t returns the string corresponding to the full contents
(up to EOF) of the reader.val file_contents : string -> string Import.Deferred.tfile_contents file returns the string with the full contents of the fileval load_sexp : ?exclusive:bool ->
string -> (Core.Std.Sexp.t -> 'a) -> 'a Core.Std.Or_error.t Import.Deferred.tload_sexp ?exclusive file ~f loads and convert the S-expression in a given file
using f, and returns the deferred conversion result as a variant of either Ok res
or Error exn otherwise. This function provides accurate error locations for failed
conversions.val load_sexp_exn : ?exclusive:bool -> string -> (Core.Std.Sexp.t -> 'a) -> 'a Import.Deferred.tval load_sexps : ?exclusive:bool ->
string ->
(Core.Std.Sexp.t -> 'a) -> 'a list Core.Std.Or_error.t Import.Deferred.tload_sexps file ~f load and convert the S-expressions in a given file using f,
and return the deferred list of conversion results as variants of either Ok res or
Error exn otherwise. This function is as efficient as load_sexps followed by
conversion if there are no errors, but provides accurate error locations for failed
conversions.val load_sexps_exn : ?exclusive:bool ->
string -> (Core.Std.Sexp.t -> 'a) -> 'a list Import.Deferred.t