sig
  module Server :
    sig
      module File : sig type t end
      val serve :
        auth:(Import.Socket.Address.Inet.t -> bool) ->
        port:int -> Tcp.Server.inet Import.Deferred.t
      val open_file :
        ?append:bool ->
        ?dos_format:bool ->
        string -> Tcp_file.Server.File.t Import.Deferred.t
      val serve_existing_static_file : string -> unit Import.Deferred.t
      val stop_serving : Tcp_file.Server.File.t -> unit
      val close :
        ?stop_serving:bool ->
        Tcp_file.Server.File.t -> unit Import.Deferred.t
      val write_message : Tcp_file.Server.File.t -> string -> unit
      val schedule_message :
        Tcp_file.Server.File.t -> Core.Std.Bigstring.t -> unit
      val write_sexp : Tcp_file.Server.File.t -> Core.Std.Sexp.t -> unit
      val flushed : Tcp_file.Server.File.t -> unit Import.Deferred.t
      val with_file :
        ?append:bool ->
        string ->
        f:(Tcp_file.Server.File.t -> 'Import.Deferred.t) ->
        'Import.Deferred.t
      val writer_monitor :
        Tcp_file.Server.File.t ->
        (Import.Monitor.t, [ `This_is_a_static_file ]) Core.Std.Result.t
      val debug_snapshot : unit -> Core.Std.Sexp.t
    end
  module Client :
    sig
      type t
      module Error :
        sig
          type t = File_not_found of string | Unknown of string
          val to_string : Tcp_file.Client.Error.t -> string
          val t_of_sexp : Sexplib.Sexp.t -> Tcp_file.Client.Error.t
          val sexp_of_t : Tcp_file.Client.Error.t -> Sexplib.Sexp.t
        end
      module Message :
        sig
          type t = String of string | Bigstring of Core.Std.Bigstring.t
          val length : Tcp_file.Client.Message.t -> int
          val to_string : Tcp_file.Client.Message.t -> string option
          val to_string_exn : Tcp_file.Client.Message.t -> string
          val to_bigstring :
            Tcp_file.Client.Message.t -> Core.Std.Bigstring.t
          val bin_t :
            Tcp_file.Client.Message.t Core.Std.Bin_prot.Type_class.t
          val bin_read_t :
            Tcp_file.Client.Message.t Core.Std.Bin_prot.Read_ml.reader
          val bin_read_t_ :
            Tcp_file.Client.Message.t Core.Std.Bin_prot.Unsafe_read_c.reader
          val bin_read_t__ :
            (int -> Tcp_file.Client.Message.t)
            Core.Std.Bin_prot.Unsafe_read_c.reader
          val bin_reader_t :
            Tcp_file.Client.Message.t Core.Std.Bin_prot.Type_class.reader
          val bin_size_t :
            Tcp_file.Client.Message.t Core.Std.Bin_prot.Size.sizer
          val bin_write_t :
            Tcp_file.Client.Message.t Core.Std.Bin_prot.Write_ml.writer
          val bin_write_t_ :
            Tcp_file.Client.Message.t Core.Std.Bin_prot.Unsafe_write_c.writer
          val bin_writer_t :
            Tcp_file.Client.Message.t Core.Std.Bin_prot.Type_class.writer
        end
      module Response :
        sig
          type t =
              (Tcp_file.Client.Message.t, Tcp_file.Client.Error.t)
              Core.Std.Result.t
        end
      val connect :
        host:string ->
        port:int ->
        (Tcp_file.Client.t, Core.Std.Exn.t) Core.Std.Result.t
        Import.Deferred.t
      val disconnect : Tcp_file.Client.t -> unit Import.Deferred.t
      val read :
        Tcp_file.Client.t ->
        string ->
        Tcp_file.Client.Response.t Import.Pipe.Reader.t Import.Deferred.t
      val tail :
        Tcp_file.Client.t ->
        string ->
        Tcp_file.Client.Response.t Import.Pipe.Reader.t Import.Deferred.t
    end
end