sig
  val u_bom : Uchar.t
  val u_rep : Uchar.t
  type encoding = [ `UTF_16 | `UTF_16BE | `UTF_16LE | `UTF_8 ]
  type decoder_encoding =
      [ `ISO_8859_1 | `US_ASCII | `UTF_16 | `UTF_16BE | `UTF_16LE | `UTF_8 ]
  val encoding_of_string : string -> Uutf.decoder_encoding option
  val encoding_to_string : [< Uutf.decoder_encoding ] -> string
  type src =
      [ `Channel of Pervasives.in_channel | `Manual | `String of string ]
  type nln = [ `ASCII of Uchar.t | `NLF of Uchar.t | `Readline of Uchar.t ]
  type decoder
  val decoder :
    ?nln:[< Uutf.nln ] ->
    ?encoding:[< Uutf.decoder_encoding ] -> [< Uutf.src ] -> Uutf.decoder
  val decode :
    Uutf.decoder ->
    [ `Await | `End | `Malformed of string | `Uchar of Uchar.t ]
  val decoder_encoding : Uutf.decoder -> Uutf.decoder_encoding
  val set_decoder_encoding :
    Uutf.decoder -> [< Uutf.decoder_encoding ] -> unit
  val decoder_line : Uutf.decoder -> int
  val decoder_col : Uutf.decoder -> int
  val decoder_byte_count : Uutf.decoder -> int
  val decoder_count : Uutf.decoder -> int
  val decoder_removed_bom : Uutf.decoder -> bool
  val decoder_src : Uutf.decoder -> Uutf.src
  val decoder_nln : Uutf.decoder -> Uutf.nln option
  val pp_decode :
    Format.formatter ->
    [< `Await | `End | `Malformed of string | `Uchar of Uchar.t ] -> unit
  type dst =
      [ `Buffer of Buffer.t | `Channel of Pervasives.out_channel | `Manual ]
  type encoder
  val encoder : [< Uutf.encoding ] -> [< Uutf.dst ] -> Uutf.encoder
  val encode :
    Uutf.encoder ->
    [< `Await | `End | `Uchar of Uchar.t ] -> [ `Ok | `Partial ]
  val encoder_encoding : Uutf.encoder -> Uutf.encoding
  val encoder_dst : Uutf.encoder -> Uutf.dst
  module Manual :
    sig
      val src : Uutf.decoder -> Bytes.t -> int -> int -> unit
      val dst : Uutf.encoder -> Bytes.t -> int -> int -> unit
      val dst_rem : Uutf.encoder -> int
    end
  module String :
    sig
      val encoding_guess :
        string -> [ `UTF_16BE | `UTF_16LE | `UTF_8 ] * bool
      type 'a folder =
          '-> int -> [ `Malformed of string | `Uchar of Uchar.t ] -> 'a
      val fold_utf_8 :
        ?pos:int -> ?len:int -> 'Uutf.String.folder -> '-> string -> 'a
      val fold_utf_16be :
        ?pos:int -> ?len:int -> 'Uutf.String.folder -> '-> string -> 'a
      val fold_utf_16le :
        ?pos:int -> ?len:int -> 'Uutf.String.folder -> '-> string -> 'a
    end
  module Buffer :
    sig
      val add_utf_8 : Buffer.t -> Uchar.t -> unit
      val add_utf_16be : Buffer.t -> Uchar.t -> unit
      val add_utf_16le : Buffer.t -> Uchar.t -> unit
    end
end