sig
  type error =
      Invalid_magic of Utils.u2
    | Invalid_version of Utils.u2
    | Invalid_stream
    | Array_type_waited
    | Unknown_reference
    | Invalid_class_flags of Utils.s1
    | Missing_read_function
    | Missing_write_function
    | Missing_field of Utils.UTF8.t
    | Invalid_field_type of Utils.UTF8.t
  exception Exception of Serialization.error
  val string_of_error : Serialization.error -> string
  type descriptor
  and read_method = InputStream.t -> Serialization.instance -> unit
  and write_method = OutputStream.t -> Serialization.instance -> unit
  and instance
  and array_instance =
      Boolean_array of bool array
    | Byte_array of Utils.s1 array
    | Char_array of Utils.u2 array
    | Double_array of float array
    | Float_array of float array
    | Int_array of Utils.s4 array
    | Long_array of Utils.s8 array
    | Object_array of Serialization.object_value array
    | Short_array of Utils.s2 array
  and object_value =
      Null
    | Block_data of string
    | String of Utils.UTF8.t
    | Class_desc of Serialization.descriptor
    | Instance of Serialization.instance
    | Array_instance of Serialization.descriptor *
        Serialization.array_instance
    | Enum of (Serialization.descriptor * Utils.UTF8.t)
  and field_value =
      Boolean_value of bool
    | Byte_value of Utils.s1
    | Char_value of Utils.u2
    | Double_value of float
    | Float_value of float
    | Int_value of Utils.s4
    | Long_value of Utils.s8
    | Object_value of Serialization.object_value
    | Short_value of Utils.s2
  val make_descriptor :
    Utils.UTF8.t ->
    Utils.s8 ->
    Serialization.object_value list ->
    (Descriptor.for_field * Name.for_field) list ->
    Serialization.descriptor option ->
    bool ->
    (Serialization.read_method * Serialization.write_method) option ->
    Serialization.descriptor
  val make_proxy_descriptor :
    Utils.UTF8.t list ->
    Serialization.object_value list ->
    Serialization.descriptor option -> Serialization.descriptor
  val serial_of_descriptor : Serialization.descriptor -> Utils.s8
  val class_name_of_descriptor : Serialization.descriptor -> Utils.UTF8.t
  val class_annotation_of_descriptor :
    Serialization.descriptor -> Serialization.object_value list
  val super_class_desc_of_descriptor :
    Serialization.descriptor -> Serialization.descriptor option
  val fields_of_descriptor :
    Serialization.descriptor -> (Descriptor.for_field * Name.for_field) list
  val methods_of_descriptor :
    Serialization.descriptor ->
    (Serialization.read_method * Serialization.write_method) option
  val make_instance :
    Serialization.descriptor ->
    (Name.for_field * Serialization.field_value) list ->
    Serialization.object_value list -> Serialization.instance
  val encode : OutputStream.t -> Serialization.object_value list -> unit
  val encode_one : OutputStream.t -> Serialization.object_value -> unit
  val decode : InputStream.t -> Serialization.object_value list
  val descriptor_of_definition :
    ClassLoader.t -> ClassDefinition.t -> Serialization.descriptor
  val instance_of_function :
    Serialization.descriptor ->
    Serialization.object_value list ->
    (Name.for_field -> Serialization.field_value) -> Serialization.instance
  val object_value_of_function :
    Serialization.descriptor ->
    Serialization.object_value list ->
    (Name.for_field -> Serialization.field_value) ->
    Serialization.object_value
end