sig
  type value_type =
      VaNull
    | VaList
    | VaInt8
    | VaInt16
    | VaInt32
    | VaExtended
    | VaString
    | VaIdent
    | VaFalse
    | VaTrue
    | VaBinary
    | VaSet
    | VaLString
    | VaNil
    | VaCollection
    | VaSingle
    | VaCurrency
    | VaDate
    | VaWString
    | VaInt64
    | VaUTF8String
    | VaDouble
  val min_value : Dfm.value_type
  val max_value : Dfm.value_type
  type filer_flag = FfInherited | FfChildPos | FfInline
  type filer_flags = int
  val set_of_ff : Dfm.filer_flag -> Dfm.filer_flags
  val filer_signature : string
  type byte_array =
      (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t
  type variant =
      [ `binary of Dfm.byte_array
      | `bool of bool
      | `char of char
      | `currency of float
      | `efloat of float * (int64 * int)
      | `float of float
      | `int of int
      | `int32 of int32
      | `int64 of int64
      | `nil
      | `null
      | `sfloat of float
      | `string of string
      | `tag of string
      | `time of float
      | `wchar of int
      | `wstring of Unicode.utf16_string ]
  val datetime_of_unixtime : float -> float
  val unixtime_of_datetime : float -> float
  val extended_of_float : float -> int64 * int
  val float_of_extended : int64 * int -> float
  module Writer :
    sig
      type write_handler = string -> int -> int -> unit
      val write_raw_byte : string -> Dfm.Writer.write_handler -> int -> unit
      val write_raw_int8 : Dfm.Writer.write_handler -> int -> unit
      val write_raw_int16 : Dfm.Writer.write_handler -> int -> unit
      val write_raw_int32 : Dfm.Writer.write_handler -> int32 -> unit
      val write_raw_int64 : Dfm.Writer.write_handler -> int64 -> unit
      val write_raw_extended_image :
        Dfm.Writer.write_handler -> int64 * int -> unit
      val write_raw_extended : Dfm.Writer.write_handler -> float -> unit
      val write_raw_short_string : Dfm.Writer.write_handler -> string -> unit
      val write_raw_zero_terminated_string :
        Dfm.Writer.write_handler -> string -> unit
      val write_resource_header :
        Dfm.Writer.write_handler -> string -> int -> unit
      val write_value : Dfm.Writer.write_handler -> Dfm.value_type -> unit
      val write_int8 : Dfm.Writer.write_handler -> int -> unit
      val write_int16 : Dfm.Writer.write_handler -> int -> unit
      val write_int32 : Dfm.Writer.write_handler -> int32 -> unit
      val write_int64 : Dfm.Writer.write_handler -> int64 -> unit
      val write_int : Dfm.Writer.write_handler -> int -> unit
      val write_string : Dfm.Writer.write_handler -> string -> unit
      val write_wide_string :
        Dfm.Writer.write_handler -> Unicode.utf16_string -> unit
      val write_char : Dfm.Writer.write_handler -> char -> unit
      val write_wchar : Dfm.Writer.write_handler -> int -> unit
      val write_bool : Dfm.Writer.write_handler -> bool -> unit
      val write_ident : Dfm.Writer.write_handler -> string -> unit
      val write_single : Dfm.Writer.write_handler -> float -> unit
      val write_double : Dfm.Writer.write_handler -> float -> unit
      val write_extended_image :
        Dfm.Writer.write_handler -> int64 * int -> unit
      val write_extended : Dfm.Writer.write_handler -> float -> unit
      val write_currency : Dfm.Writer.write_handler -> float -> unit
      val write_date : Dfm.Writer.write_handler -> float -> unit
      val write_binary : Dfm.Writer.write_handler -> Dfm.byte_array -> unit
      val write_nil : Dfm.Writer.write_handler -> unit
      val write_null : Dfm.Writer.write_handler -> unit
      val write_property_name : Dfm.Writer.write_handler -> string -> unit
      val write_list_begin : Dfm.Writer.write_handler -> unit
      val write_list_end : Dfm.Writer.write_handler -> unit
      val write_collection_begin : Dfm.Writer.write_handler -> unit
      val write_collection_end : Dfm.Writer.write_handler -> unit
      val write_set_begin : Dfm.Writer.write_handler -> unit
      val write_set_end : Dfm.Writer.write_handler -> unit
      val write_set_element :
        Dfm.Writer.write_handler ->
        [ `char of char | `int of int | `tag of string | `wchar of int ] ->
        unit
      val write_signature : Dfm.Writer.write_handler -> unit
      val write_component :
        Dfm.Writer.write_handler ->
        Dfm.filer_flags -> int -> string -> string -> unit
      val write_variant : Dfm.Writer.write_handler -> Dfm.variant -> unit
      val create :
        ?resource_header:bool ->
        string ->
        Pervasives.out_channel ->
        [> `writing of
             (unit -> unit) list Pervasives.ref *
             (string ->
              [< `binary of Dfm.byte_array
               | `bool of bool
               | `char of char
               | `currency of float
               | `efloat of float * (int64 * int)
               | `end_of_list
               | `end_of_record
               | `float of float
               | `int of int
               | `int32 of int32
               | `int64 of int64
               | `list of [< `any | `record ]
               | `nil
               | `none
               | `null
               | `record
               | `sfloat of float
               | `some
               | `string of string
               | `tag of string
               | `time of float
               | `wchar of int
               | `wstring of Unicode.utf16_string ] ->
              unit) ]
    end
  module Reader :
    sig
      type read_handler = string -> int -> int -> int
      val read_raw_byte : string -> Dfm.Reader.read_handler -> int
      val read_raw_int8 : Dfm.Reader.read_handler -> int
      val read_raw_int16 : Dfm.Reader.read_handler -> int
      val read_raw_int32 : Dfm.Reader.read_handler -> int32
      val read_raw_int64 : Dfm.Reader.read_handler -> int64
      val read_raw_extended :
        Dfm.Reader.read_handler -> float * (int64 * int)
      val read_raw_date : Dfm.Reader.read_handler -> float
      val read_raw_short_string : Dfm.Reader.read_handler -> string
      val read_raw_zero_terminated_string : Dfm.Reader.read_handler -> string
      val read_raw_long_string : Dfm.Reader.read_handler -> string
      val read_raw_wide_string :
        Dfm.Reader.read_handler -> Unicode.utf16_string
      val read_raw_binary : Dfm.Reader.read_handler -> Dfm.byte_array
      val read_value : Dfm.Reader.read_handler -> Dfm.value_type
      val read_int : Dfm.Reader.read_handler -> int64
      val read_set_element :
        Dfm.Reader.read_handler ->
        [ `char of char | `int of int | `tag of string | `wchar of int ]
        option
      val read_list : Dfm.Reader.read_handler -> int option
      val read_variant :
        Dfm.Reader.read_handler ->
        [ `binary of Dfm.byte_array
        | `bool of bool
        | `char of char
        | `collection
        | `currency of float
        | `efloat of float * (int64 * int)
        | `float of float
        | `int of int
        | `int32 of int32
        | `int64 of int64
        | `list
        | `nil
        | `null
        | `set
        | `sfloat of float
        | `string of string
        | `tag of string
        | `time of float
        | `wchar of int
        | `wstring of Unicode.utf16_string ]
      val read_property_name : Dfm.Reader.read_handler -> string option
      val read_resource_header : Dfm.Reader.read_handler -> string
      val read_signature : Dfm.Reader.read_handler -> unit
      val read_component :
        Dfm.Reader.read_handler ->
        (Dfm.filer_flags * int * string * string) option
      val create :
        ?resource_header:bool ->
        string ->
        Pervasives.in_channel ->
        [> `reading of
             string Pervasives.ref *
             [> `binary of Dfm.byte_array
              | `bool of bool
              | `char of char
              | `end_of_list
              | `end_of_record
              | `float of float
              | `int of int
              | `int32 of int32
              | `int64 of int64
              | `list of [> `any ]
              | `nil
              | `null
              | `record
              | `string of string
              | `tag of string
              | `time of float ]
             Pervasives.ref * (unit -> unit) * (float -> float) ]
    end
end