From 25eb8b765aa49e55a31e4b423f4b35903a5c3078 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 8 Aug 2023 12:41:42 -0400 Subject: [PATCH] rename `IO.{In,Out}_channel` to avoid confusion these are not the standard in/out_channels so we should just use different names. --- src/Tiny_httpd_html.ml | 4 ++-- src/Tiny_httpd_io.ml | 15 +++++++------- src/Tiny_httpd_server.ml | 33 +++++++++++++++---------------- src/Tiny_httpd_stream.ml | 22 ++++++++++----------- src/Tiny_httpd_stream.mli | 6 +++--- src/camlzip/Tiny_httpd_camlzip.ml | 2 +- src/gen/gentags.ml | 12 +++++------ 7 files changed, 45 insertions(+), 49 deletions(-) diff --git a/src/Tiny_httpd_html.ml b/src/Tiny_httpd_html.ml index 1872707d..28fe8fa1 100644 --- a/src/Tiny_httpd_html.ml +++ b/src/Tiny_httpd_html.ml @@ -16,7 +16,7 @@ include Tiny_httpd_html_ be a "html" tag. @since NEXT_RELEASE *) -let to_out_channel ?(top = false) (self : elt) (out : IO.Out_channel.t) : unit = +let to_out_channel ?(top = false) (self : elt) (out : IO.Output.t) : unit = let out = Out.create_of_out out in if top then Out.add_string out "\n"; self out; @@ -28,7 +28,7 @@ let to_out_channel ?(top = false) (self : elt) (out : IO.Out_channel.t) : unit = be a "html" tag. *) let to_string ?top (self : elt) : string = let buf = Buffer.create 64 in - let out = IO.Out_channel.of_buffer buf in + let out = IO.Output.of_buffer buf in to_out_channel ?top self out; Buffer.contents buf diff --git a/src/Tiny_httpd_io.ml b/src/Tiny_httpd_io.ml index 815bd8de..64e376bf 100644 --- a/src/Tiny_httpd_io.ml +++ b/src/Tiny_httpd_io.ml @@ -11,7 +11,7 @@ module Buf = Tiny_httpd_buf (** Input channel (byte source) *) -module In_channel = struct +module Input = struct type t = { input: bytes -> int -> int -> int; (** Read into the slice. Returns [0] only if the @@ -54,7 +54,7 @@ module In_channel = struct end (** Output channel (byte sink) *) -module Out_channel = struct +module Output = struct type t = { output_char: char -> unit; (** Output a single char *) output: bytes -> int -> int -> unit; (** Output slice *) @@ -65,7 +65,7 @@ module Out_channel = struct This can be a [Buffer.t], an [out_channel], a [Unix.file_descr], etc. *) - (** [of_out_channel oc] wraps the channel into a {!Out_channel.t}. + (** [of_out_channel oc] wraps the channel into a {!Output.t}. @param close_noerr if true, then closing the result uses [close_out_noerr] instead of [close_out] to close [oc] *) let of_out_channel ?(close_noerr = false) (oc : out_channel) : t = @@ -158,7 +158,7 @@ end (** A writer abstraction. *) module Writer = struct - type t = { write: Out_channel.t -> unit } [@@unboxed] + type t = { write: Output.t -> unit } [@@unboxed] (** Writer. A writer is a push-based stream of bytes. @@ -173,22 +173,21 @@ module Writer = struct let[@inline] make ~write () : t = { write } (** Write into the channel. *) - let[@inline] write (oc : Out_channel.t) (self : t) : unit = self.write oc + let[@inline] write (oc : Output.t) (self : t) : unit = self.write oc (** Empty writer, will output 0 bytes. *) let empty : t = { write = ignore } (** A writer that just emits the bytes from the given string. *) let[@inline] of_string (str : string) : t = - let write oc = Out_channel.output_string oc str in + let write oc = Output.output_string oc str in { write } end (** A TCP server abstraction. *) module TCP_server = struct type conn_handler = { - handle: In_channel.t -> Out_channel.t -> unit; - (** Handle client connection *) + handle: Input.t -> Output.t -> unit; (** Handle client connection *) } type t = { diff --git a/src/Tiny_httpd_server.ml b/src/Tiny_httpd_server.ml index c8cc7a3e..e59fa360 100644 --- a/src/Tiny_httpd_server.ml +++ b/src/Tiny_httpd_server.ml @@ -444,7 +444,7 @@ module Response = struct Format.fprintf out "{@[code=%d;@ headers=[@[%a@]];@ body=%a@]}" self.code Headers.pp self.headers pp_body self.body - let output_ ~buf (oc : IO.Out_channel.t) (self : t) : unit = + let output_ ~buf (oc : IO.Output.t) (self : t) : unit = (* double indirection: - print into [buffer] using [bprintf] - transfer to [buf_] so we can output from there *) @@ -488,21 +488,21 @@ module Response = struct Buffer.clear tmp_buffer) headers; - IO.Out_channel.output_buf oc buf; - IO.Out_channel.output_string oc "\r\n"; + IO.Output.output_buf oc buf; + IO.Output.output_string oc "\r\n"; Buf.clear buf; (match body with | `String "" | `Void -> () - | `String s -> IO.Out_channel.output_string oc s + | `String s -> IO.Output.output_string oc s | `Writer w -> (* use buffer to chunk encode [w] *) - let oc' = IO.Out_channel.chunk_encoding ~buf ~close_rec:false oc in + let oc' = IO.Output.chunk_encoding ~buf ~close_rec:false oc in (try IO.Writer.write oc' w; - IO.Out_channel.close oc' + IO.Output.close oc' with e -> - IO.Out_channel.close oc'; + IO.Output.close oc'; raise e) | `Stream str -> (try @@ -511,7 +511,7 @@ module Response = struct with e -> Byte_stream.close str; raise e)); - IO.Out_channel.flush oc + IO.Output.flush oc end (* semaphore, for limiting concurrency. *) @@ -645,7 +645,7 @@ module Middleware = struct end (* a request handler. handles a single request. *) -type cb_path_handler = IO.Out_channel.t -> Middleware.handler +type cb_path_handler = IO.Output.t -> Middleware.handler module type SERVER_SENT_GENERATOR = sig val set_headers : Headers.t -> unit @@ -793,7 +793,7 @@ let[@inline] _opt_iter ~f o = exception Exit_SSE let add_route_server_sent_handler ?accept self route f = - let tr_req (oc : IO.Out_channel.t) req ~resp f = + let tr_req (oc : IO.Output.t) req ~resp f = let req = Pool.with_resource self.buf_pool @@ fun buf -> Request.read_body_full ~buf req @@ -816,7 +816,7 @@ let add_route_server_sent_handler ?accept self route f = in let[@inline] writef fmt = - Printf.ksprintf (IO.Out_channel.output_string oc) fmt + Printf.ksprintf (IO.Output.output_string oc) fmt in let send_event ?event ?id ?retry ~data () : unit = @@ -826,9 +826,9 @@ let add_route_server_sent_handler ?accept self route f = _opt_iter retry ~f:(fun e -> writef "retry: %s\n" e); let l = String.split_on_char '\n' data in List.iter (fun s -> writef "data: %s\n" s) l; - IO.Out_channel.output_string oc "\n"; + IO.Output.output_string oc "\n"; (* finish group *) - IO.Out_channel.flush oc + IO.Output.flush oc in let module SSG = struct let set_headers h = @@ -841,7 +841,7 @@ let add_route_server_sent_handler ?accept self route f = let close () = raise Exit_SSE end in try f req (module SSG : SERVER_SENT_GENERATOR) - with Exit_SSE -> IO.Out_channel.close oc + with Exit_SSE -> IO.Output.close oc in add_route_handler_ self ?accept ~meth:`GET route ~tr_req f @@ -938,10 +938,9 @@ module Unix_tcp_server_ = struct Unix.(setsockopt_float client_sock SO_RCVTIMEO self.timeout); Unix.(setsockopt_float client_sock SO_SNDTIMEO self.timeout); let oc = - IO.Out_channel.of_out_channel - @@ Unix.out_channel_of_descr client_sock + IO.Output.of_out_channel @@ Unix.out_channel_of_descr client_sock in - let ic = IO.In_channel.of_unix_fd client_sock in + let ic = IO.Input.of_unix_fd client_sock in handle.handle ic oc; _debug (fun k -> k "done with client, exiting"); (try Unix.close client_sock diff --git a/src/Tiny_httpd_stream.ml b/src/Tiny_httpd_stream.ml index cdaad2e2..5f8cf0a7 100644 --- a/src/Tiny_httpd_stream.ml +++ b/src/Tiny_httpd_stream.ml @@ -46,28 +46,28 @@ let make ?(bs = Bytes.create @@ (16 * 1024)) ?(close = ignore) ~consume ~fill () in self -let of_input ?(buf_size = 16 * 1024) (ic : IO.In_channel.t) : t = +let of_input ?(buf_size = 16 * 1024) (ic : IO.Input.t) : t = make ~bs:(Bytes.create buf_size) - ~close:(fun _ -> IO.In_channel.close ic) + ~close:(fun _ -> IO.Input.close ic) ~consume:(fun self n -> self.off <- self.off + n; self.len <- self.len - n) ~fill:(fun self -> if self.off >= self.len then ( self.off <- 0; - self.len <- IO.In_channel.input ic self.bs 0 (Bytes.length self.bs) + self.len <- IO.Input.input ic self.bs 0 (Bytes.length self.bs) )) () let of_chan_ ?buf_size ic ~close_noerr : t = - let inc = IO.In_channel.of_in_channel ~close_noerr ic in + let inc = IO.Input.of_in_channel ~close_noerr ic in of_input ?buf_size inc let of_chan ?buf_size ic = of_chan_ ?buf_size ic ~close_noerr:false let of_chan_close_noerr ?buf_size ic = of_chan_ ?buf_size ic ~close_noerr:true let of_fd_ ?buf_size ~close_noerr ic : t = - let inc = IO.In_channel.of_unix_fd ~close_noerr ic in + let inc = IO.Input.of_unix_fd ~close_noerr ic in of_input ?buf_size inc let of_fd ?buf_size fd : t = of_fd_ ?buf_size ~close_noerr:false fd @@ -84,9 +84,7 @@ let rec iter f (self : t) : unit = ) let to_chan (oc : out_channel) (self : t) = iter (output oc) self - -let to_chan' (oc : IO.Out_channel.t) (self : t) = - iter (IO.Out_channel.output oc) self +let to_chan' (oc : IO.Output.t) (self : t) = iter (IO.Output.output oc) self let to_writer (self : t) : Tiny_httpd_io.Writer.t = { write = (fun oc -> to_chan' oc self) } @@ -299,11 +297,11 @@ let read_chunked ?(buf = Buf.create ()) ~fail (bs : t) : t = refill := false) () -let output_chunked' ?buf (oc : IO.Out_channel.t) (self : t) : unit = - let oc' = IO.Out_channel.chunk_encoding ?buf oc ~close_rec:false in +let output_chunked' ?buf (oc : IO.Output.t) (self : t) : unit = + let oc' = IO.Output.chunk_encoding ?buf oc ~close_rec:false in to_chan' oc' self; - IO.Out_channel.close oc' + IO.Output.close oc' (* print a stream as a series of chunks *) let output_chunked ?buf (oc : out_channel) (self : t) : unit = - output_chunked' ?buf (IO.Out_channel.of_out_channel oc) self + output_chunked' ?buf (IO.Output.of_out_channel oc) self diff --git a/src/Tiny_httpd_stream.mli b/src/Tiny_httpd_stream.mli index 7f8b38b8..5d75380c 100644 --- a/src/Tiny_httpd_stream.mli +++ b/src/Tiny_httpd_stream.mli @@ -64,7 +64,7 @@ val close : t -> unit val empty : t (** Stream with 0 bytes inside *) -val of_input : ?buf_size:int -> Tiny_httpd_io.In_channel.t -> t +val of_input : ?buf_size:int -> Tiny_httpd_io.Input.t -> t (** Make a buffered stream from the given channel. @since NEXT_RELEASE *) @@ -94,7 +94,7 @@ val to_chan : out_channel -> t -> unit (** Write the stream to the channel. @since 0.3 *) -val to_chan' : Tiny_httpd_io.Out_channel.t -> t -> unit +val to_chan' : Tiny_httpd_io.Output.t -> t -> unit (** Write to the IO channel. @since NEXT_RELEASE *) @@ -154,6 +154,6 @@ val output_chunked : ?buf:Tiny_httpd_buf.t -> out_channel -> t -> unit @param buf optional buffer for chunking (since NEXT_RELEASE) *) val output_chunked' : - ?buf:Tiny_httpd_buf.t -> Tiny_httpd_io.Out_channel.t -> t -> unit + ?buf:Tiny_httpd_buf.t -> Tiny_httpd_io.Output.t -> t -> unit (** Write the stream into the channel, using the chunked encoding. @since NEXT_RELEASE *) diff --git a/src/camlzip/Tiny_httpd_camlzip.ml b/src/camlzip/Tiny_httpd_camlzip.ml index 5d3cbe6c..65833d20 100644 --- a/src/camlzip/Tiny_httpd_camlzip.ml +++ b/src/camlzip/Tiny_httpd_camlzip.ml @@ -1,7 +1,7 @@ module S = Tiny_httpd_server module BS = Tiny_httpd_stream module W = Tiny_httpd_io.Writer -module Out = Tiny_httpd_io.Out_channel +module Out = Tiny_httpd_io.Output let decode_deflate_stream_ ~buf_size (is : S.byte_stream) : S.byte_stream = S._debug (fun k -> k "wrap stream with deflate.decode"); diff --git a/src/gen/gentags.ml b/src/gen/gentags.ml index d956f14d..c23bcfbc 100644 --- a/src/gen/gentags.ml +++ b/src/gen/gentags.ml @@ -294,7 +294,7 @@ let prelude = module Out : sig type t val create_of_buffer : Buffer.t -> t - val create_of_out: Tiny_httpd_io.Out_channel.t -> t + val create_of_out: Tiny_httpd_io.Output.t -> t val flush : t -> unit val add_char : t -> char -> unit val add_string : t -> string -> unit @@ -303,14 +303,14 @@ module Out : sig end = struct module IO = Tiny_httpd_io type t = { - out: IO.Out_channel.t; + out: IO.Output.t; mutable fmt_nl: bool; (* if true, we print [\n] around tags to format the html *) } let create_of_out out = {out; fmt_nl=true} - let create_of_buffer buf : t = create_of_out (IO.Out_channel.of_buffer buf) - let[@inline] flush self : unit = IO.Out_channel.flush self.out - let[@inline] add_char self c = IO.Out_channel.output_char self.out c - let[@inline] add_string self s = IO.Out_channel.output_string self.out s + let create_of_buffer buf : t = create_of_out (IO.Output.of_buffer buf) + let[@inline] flush self : unit = IO.Output.flush self.out + let[@inline] add_char self c = IO.Output.output_char self.out c + let[@inline] add_string self s = IO.Output.output_string self.out s let[@inline] add_format_nl self = if self.fmt_nl then add_char self '\n' let with_no_format_nl self f = if self.fmt_nl then (